从其他脚本调用时可以工作的 python atexit 模块的替代方案
使用atexit.register(function) 注册一个在Python 脚本退出时调用的函数是一种常见的做法。
问题是我发现了一个以丑陋的方式失败的情况:如果你的脚本是使用 execfile() 从另一个 python 脚本执行的。
在这种情况下,你会发现Python在退出时将无法找到你的函数,这是有道理的。
我的问题是如何以不出现此问题的方式保留此功能。
Using atexit.register(function)
to register a function to be called when your python script exits is a common practice.
The problem is that I identified a case when this fails in an ugly way: if your script it executed from another python script using the execfile()
.
In this case you will discover that Python will not be able to locate your function when it does exits, and this makes sense.
My question is how to keep this functionality in a way that does not presents this issue.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为您遇到的问题是当前工作目录的位置。您可以通过执行以下操作来确保指定正确的位置:
I think the problem you're having is with the location of the current working directory. You could ensure that you're specifying the correct location doing something like this:
这对我有用。我创建了一个由另一个文件
a.py
执行的文件:然后
b.py
调用 execfile:当我运行
b.py
时>,两个注册的函数都被调用:请注意,当我运行这些脚本时,它们都位于同一目录中。如果您的
a.py
正如 Ryan Ginstrom 在他的回答中提到的那样位于单独的目录中,您将需要使用它的完整路径,例如:This works for me. I created a file to be executed by another file,
a.py
:And then
b.py
to call execfile:When I run
b.py
, both registered functions get called:Note that both of these scripts are in the same directory when I ran them. If your
a.py
is in a separate directory as Ryan Ginstrom mentioned in his answer, you will need to use the full path to it, like: