繁体   English   中英

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

[英]Alternative to python atexit module that works when called from other scripts

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

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

在这种情况下,您会发现Python退出后将无法定位您的函数,这很有意义。

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

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

import os

target = os.path.join(os.path.dirname(__file__), "mytarget.py")

这对我有用。 我创建了一个要由另一个文件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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM