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