繁体   English   中英

如何在停止python脚本之前运行命令

[英]How to run a command before stopping a python script

我有一个Python代码,可在端口5002上启动UDP通信。 所以发生的事情是,当我第一次运行代码时,它可以正常工作,然后我使用ctlr z/ctrl c关闭python脚本,然后再次运行显示错误以下信息的代码:

sock.bind(address)
OSError: [Errno 98] Address already in use

这可能是因为python脚本正在运行并保持端口繁忙。 因此它向我显示了以上错误。 为了解决这个问题,我想到了在代码杀死sock.close()关闭套接字和sys.exit()以正确退出python脚本之前运行这两个命令。 这就是为什么我需要知道如何在代码被杀死之前立即运行这些命令。 我不能使用KeyboardInterrupt异常,因为将来它将作为服务运行。

我找到了这个答案,但无法实现。 例如,如果我这样做:

import atexit
import time

def exit_handler():
    print("STOPPED")

while True:
    print("Running....")
    time.sleep(1)
    atexit.register(exit_handler)

这样可以继续运行,但是当我杀死代码时,它不会显示Stopped 如何实施它,或者有其他方法可以处理我的情况。

谢谢

atexit模块的文档有一个重要说明:

注意:当程序被非Python处理的信号杀死时,不会调用通过此模块注册的功能

这意味着,如果您在不进行特殊处理的情况下终止脚本,则不会调用已注册的函数。

因此,您应该注册SIGTERM和SIGINT的处理程序:

signal.signal(SIGTERM, (lambda signum, frame: exit_handler()))
signal.signal(SIGINT, (lambda signum, frame: exit_handler()))

暂无
暂无

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

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