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

发布于 2024-09-18 17:33:53 字数 214 浏览 3 评论 0原文

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

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

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

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

Using atexit.register(function) to register a function to be called when your python script exits is a common practice.

The problem is that I identified a case when this fails in an ugly way: if your script it executed from another python script using the execfile().

In this case you will discover that Python will not be able to locate your function when it does exits, and this makes sense.

My question is how to keep this functionality in a way that does not presents this issue.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

从来不烧饼 2024-09-25 17:33:53

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

import os

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

I think the problem you're having is with the location of the current working directory. You could ensure that you're specifying the correct location doing something like this:

import os

target = os.path.join(os.path.dirname(__file__), "mytarget.py")
焚却相思 2024-09-25 17:33:53

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

This works for me. I created a file to be executed by another file, a.py:

$ cat a.py 
import atexit

@atexit.register
def myexit():
    print 'myexit in a.py'

And then b.py to call execfile:

$ cat b.py 
import atexit

@atexit.register
def b_myexit():
    print 'b_myexit in b.py'

execfile('a.py')

When I run b.py, both registered functions get called:

$ python b.py 
myexit in a.py
b_myexit in b.py

Note that both of these scripts are in the same directory when I ran them. If your a.py is in a separate directory as Ryan Ginstrom mentioned in his answer, you will need to use the full path to it, like:

execfile('/path/to/a.py')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文