0

使用atexit.register(function)注册一个函数以在你的 python 脚本退出时调用是一种常见的做法。

问题是我发现了一个以丑陋方式失败的情况:如果您的脚本使用execfile().

在这种情况下,您会发现 Python 在退出时将无法定位您的函数,这是有道理的。

我的问题是如何以不存在此问题的方式保留此功能。

4

2 回答 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')
于 2010-09-19T23:20:48.327 回答
0

我认为您遇到的问题是当前工作目录的位置。您可以确保指定正确的位置,执行如下操作:

import os

target = os.path.join(os.path.dirname(__file__), "mytarget.py")
于 2010-09-08T10:31:10.350 回答