替代python atexit模块,从其他脚本调用时可以工作

时间:2010-09-08 09:54:04

标签: python atexit execfile

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

问题是我确定了一个以丑陋方式失败的情况:如果你的脚本是使用execfile()从另一个python脚本执行的。

在这种情况下,您会发现Python在退出时无法找到您的功能,这是有道理的。

我的问题是如何以不会出现此问题的方式保留此功能。

2 个答案:

答案 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')