在Python可执行文件中实现退出例程

问题描述 投票:0回答:1

我已经使用该库创建了一个Python应用程序的可执行文件

pyinstaller

当通过双击启动

*.exe
时,带有 python 控制台的窗口启动并且应用程序开始运行。 现在,当我使用每个窗口右上角的 X 关闭应用程序时,我想在应用程序最终停止之前执行一些代码。

这是我的代码片段,它给出了我正在尝试做的事情的示例:

def exit_handler():
    # This code should get executed before the application finally terminates
    print("I want this to print")
    sys.exit()

def main(*args):
    atexit.register(exit_handler)
    signal.signal(signal.SIGTERM, exit_handler)
    signal.signal(signal.SIGINT, exit_handler)
    uvicorn.run(app, host="0.0.0.0", port=8000)

不幸的是,在使用

signal
构建可执行文件时,使用
atexit
语句和
pyinstaller
库不起作用。 有谁知道这个问题的解决方案吗?

python pyinstaller executable exit
1个回答
0
投票

在 Unix 类型系统上尝试一下:

from atexit import register
from time import sleep
from signal import signal, SIGINT, SIGTERM

def end():
    print('Goodbye')

def handler(*_):
    print('Signalled')
    exit()

register(end)

signal(SIGINT, handler)
signal(SIGTERM, handler)

sleep(5)

注意信号处理程序和 atexit 函数之间的区别。

运行此程序并等待至少 5 秒钟。输出将是:

Goodbye

运行该程序并在 5 秒过去之前中断它(例如,Ctrl-C)。输出将是:

^CSignalled
Goodbye
© www.soinside.com 2019 - 2024. All rights reserved.