可以在其他脚本中调用的Python atexit模块替代方案
使用 atexit.register(function)
来注册一个函数,这个函数会在你的 Python 脚本结束时被调用,这是一个很常见的做法。
但是,我发现一个情况,这种做法会出现问题:如果你的脚本是通过另一个 Python 脚本使用 execfile()
执行的。
在这种情况下,你会发现 Python 在脚本结束时找不到你注册的函数,这其实是有道理的。
我想知道如何保持这个功能,同时避免这个问题。
2 个回答
0
这个方法对我有效。我创建了一个文件,准备让另一个文件来执行它,文件名是 a.py
:
$ cat a.py
import atexit
@atexit.register
def myexit():
print 'myexit in a.py'
然后我创建了 b.py
来调用 execfile:
$ cat b.py
import atexit
@atexit.register
def b_myexit():
print 'b_myexit in b.py'
execfile('a.py')
当我运行 b.py
的时候,两个注册的函数都会被调用:
$ python b.py
myexit in a.py
b_myexit in b.py
注意,当我运行这两个脚本的时候,它们是在同一个文件夹里的。如果你的 a.py
在一个不同的文件夹,就像 Ryan Ginstrom 在他的回答中提到的那样,你需要使用它的完整路径,比如:
execfile('/path/to/a.py')
0
我觉得你遇到的问题可能是因为当前工作目录的位置不对。你可以通过以下方式来确保你指定了正确的位置:
import os
target = os.path.join(os.path.dirname(__file__), "mytarget.py")