问题标签 [atexit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python模块中atexit调用的对象清理序列和函数
我正在使用 boost-python 将旧版 C++ 库与 Python 集成。遗留库有一些全局初始化,然后其中的类使用应用程序范围的数据。我需要确保在销毁所有包装对象后调用遗留库的关闭函数,并认为这可以通过使用 atexit 注册关闭函数来实现。但是,我发现 atexit 调用关闭函数后正在清理包装的对象,导致遗留库中出现多个段错误!
我可以通过在退出之前对包装的对象调用 del 来实现所需的行为,但希望将删除留给 Python。我已经检查了对象文档中的红色警告框。__del__,我想知道我的理想世界是否遥不可及。
在将遗留代码包装在 python 模块中时,确保在清理所有对象后调用关闭方法的任何建议?
一些重要的平台细节:
- Python 2.7.2
- 视觉工作室 2013
- 64 位构建
最小代码:
编译后,可以使用 python 运行,并显示以下输入和输出:
>>> 导入 legacy
legacy::initialize
>>> test = legacy.Test()
>>> ^Z
legacy::shutdown
legacy::Test::~Test
ruby - Selenium chromedriver 与 at_exit 不兼容
这是我的代码中的错误,还是 Selenium、RSpec 等中的错误?
我正在编写的 Cucumber 测试需要关闭并重新启动 Chrome 驱动程序。但是,我无法让第二个驱动程序正确关闭。下面的精简示例显示了这个问题:(下面的代码是 RSpec 只是因为它演示了这个问题而没有增加 Cucumber 的复杂性。)
当我运行此代码时,我收到以下错误:
at_exit
我可以说,当块运行时,第二个 chromedriver 进程不再运行。这会导致问题,因为导致关闭的任何机制都会使 Chrome 窗口保持打开状态。
RSpec 的after(:suite)
机制按预期工作。Cucumber 是否有相应的机制(除了at_exit
,在这种情况下不起作用)?或者,有没有办法阻止 chomedriver 在at_exit
块运行之前退出(所以我可以使用预期的方法将其关闭quit
)?
我正在使用最新的 selenium 和 rspec 包在 Mac OS 10.9.5 上运行 Ruby 2.0.0。
python - atexit 不写入文件
我正在atexit
通过尝试打印到文件来测试模块是否正常运行。的实际目的atexit
是关闭打开的端口,但这是首先测试是否atexit
正常工作。但是,atexit
不是打印到文件,有什么想法为什么不呢?任何帮助表示赞赏。
python - 如何防止 python 在退出时释放 ctypes 回调?
假设我有以下共享库要由ctypes
. 它允许您注册要在程序退出或您自己调用它时调用的回调:
然后假设我通过以下魔法加载这个库ctypes
:
我希望它的输出类似于以下内容:
对我来说不幸的是,它看起来更像这样:
你问这是为什么?好吧,似乎在atexit
调用函数时,python 解释器已经释放了之前包含回调的内存:
现在,我的问题。我实际上是在尝试绑定到一个较大的 C 代码库(我无法修改),其中包含在退出时调用的几个回调。当测试程序退出时,这些当前会导致分段错误。是否有可能防止这种情况发生?
c - 在我的程序中调用 atexit() 是否重要?
基本上,我正在用 SDL 编写程序。
这是代码的一部分:
我的问题如下。考虑到 C 的程序性质,如果(game.window == NULL)
是这种情况并return 1
执行,会发生什么。程序是否在return 1
不调用atexit()
该语句之后的函数的情况下终止if
?
尽管在 -语句之后有函数,程序是否仍然调用SDL_DestroyWindow()
and SDL_Quit()
,这两个函数都在函数中?atexit()
atexit()
return 1
if (game.window == NULL)
据我了解,C从上到下执行代码,那么atexit()
如果return 1
之前发生过,它怎么知道最后调用函数呢?
c - 实时/非批处理应用程序中的 C 退出代码和 atexit()
我正在编写一个游戏,其中许多不同的条件都可能导致失败,例如图像或着色器无法加载,OpenGL 无法获得有效的上下文等。
在一个理想的世界中,我想以我认为适用于 C 的方式使用退出代码,即非零用于失败条件。但是,有一些因素会影响到这一点:
- 在使用非零退出代码时,
atexit()
不调用,不幸的是我的程序清理是通过我喜欢的单个atexit()
注册分层处理的。main()
- 我突然想到,考虑到应用程序的性质 - 与批处理程序不同,游戏具有不确定的运行时间 - 可能永远不会有实际使用退出代码的实际情况。它不像 Makefile 调用的命令行图像转换器,它需要通过其退出代码知道程序是成功还是失败,从而确定是否继续构建。可能性是,如果程序在运行时出现任何问题,例如丢失文件,那是我自己解决的问题,然后顺利进行。
在我的情况下,可以提出和反对使用非零退出代码的哪些论据?
python - 无法从 python 2.7 中的 atexit 注销函数
首先,我用flush方法写了一个记录类:
然后,我想在退出时刷新:当手动停止、崩溃或任何原因时。
所以我用:
而且效果很好。
但是现在,我想用不同的缓冲区大小和不同的路径多次录制、停止录制、再次录制。所以我必须丢弃,然后实例化几个Recorder
. 它有点工作,但是 oldRecorder
的内存(包含一些 fat self._big_buffer̀
)没有被释放,因为它被atexit
. 即使我明确调用del
. 我不能atexit.unregister(self._flush)
,因为它只是 Python 3。
我不希望重用现有实例,而是丢弃旧实例并创建新实例。
你会如何处理这样的情况?
python - sys.exitfunc 在 python 中不起作用
我正在尝试按照简单的代码运行
它打印
我无法理解为什么它不打印“来自测试方法”
虽然使用 atexit 效果很好
输出
python - 使用python,如何启动一个独立的python进程
我正在制作一个python程序,比如说A。用于监控python脚本B
当 python 程序关闭时,有一个通过 atexit.register() 注册的退出函数,要进行一些清理,它需要重新运行 python 脚本 B,即使 python 脚本 A 已关闭,它也需要保持运行。
Python 脚本 B 不能是 Python 脚本 A 的一部分。
我需要做些什么来实现这一点,我已经尝试了一些方法,比如使用 subprocess.Popen(programBCommand),但这似乎不起作用,因为它会阻止 A 关闭。
我正在使用 Debian 操作系统
c++ - C++ 在退出时发送电子邮件
我想要做的是在退出我的程序时发送一封电子邮件。我使用atexit();
函数来执行此操作,但是......它无法正常工作。
功能是否SendEmail();
需要太多时间并且什么都不做?它甚至不打印服务器响应(在使用时它工作正常main();
)