使用atexit.register(function)
注册python脚本退出时要调用的函数是一种常见做法。
问题是我确定了一个以丑陋方式失败的情况:如果你的脚本是使用execfile()
从另一个python脚本执行的。
在这种情况下,您会发现Python在退出时无法找到您的功能,这是有道理的。
我的问题是如何以不会出现此问题的方式保留此功能。
答案 0 :(得分:0)
我认为您遇到的问题是当前工作目录的位置。您可以确保指定正确的位置,如下所示:
import os
target = os.path.join(os.path.dirname(__file__), "mytarget.py")
答案 1 :(得分: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')