atexit在之后未触发系统出口()被调用

2024-10-02 12:38:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我用pyautogui用python编写的自动化脚本实现一些基本的结束任务。我每天打开一个程序并点击某些按钮来创建每日报告。但是如果出了问题,我需要它关闭它正在使用的程序。在

我试着用atexit.register公司,但当我触发时它似乎没有运行系统出口(). 所以我写了一个测试脚本来验证它是否触发了

import atexit as a
import sys

def closeout():
    print("atexit triggered, closing out")

print("starting program")
print("Registering closeout with atexit")
a.register(closeout)
print(r"triggering sys.exit()")
sys.exit()

应打印以下内容:

^{pr2}$

但我没听懂最后一句话。在

有什么想法吗?如果重要的话,我会运行3.7.2。在


Tags: import程序脚本register系统报告sysexit
1条回答
网友
1楼 · 发布于 2024-10-02 12:38:18

当您从IDLE“run module”时,它使用compile内置函数从关联文件构建一个代码对象,然后使用exec运行它。运行代码的进程不会退出,SystemExit会被捕获并在空闲解释器中被忽略,否则包含它的脚本将导致IDLE退出!-因此atexit处理程序没有运行。在

此外,IDLE的默认构建被配置为在退出时删除任何register atexit函数,因此当IDLE本身最终退出时,处理程序不会运行。(请参阅cpython repo中的exit函数。)

相关问题 更多 >

    热门问题