Python信号停止脚本问题求助:新手脚本失效,请求排查错误
你的Python信号处理脚本问题分析
你的代码存在两个关键问题,导致它可能无法按预期响应终止信号:
参数名与模块名冲突:信号处理函数的第一个参数被命名为
signal,和你导入的signal模块重名。虽然当前函数里没用到该模块,但这是不良编码习惯,后续若要在函数内调用signal模块的方法会直接报错。输出缓冲导致无反馈:按下Ctrl+C后,处理函数直接调用
sys.exit()退出,但循环里的print一直在快速输出,终端输出缓冲区可能未及时刷新,导致你看不到任何退出提示,误以为程序没响应。
修改后的代码
import signal import sys def signal_abort_script(signum, frame): """ 捕获KeyboardInterrupt (Ctrl+C)并优雅退出脚本的信号处理函数 """ print("\n收到终止信号,正在退出...", flush=True) sys.exit(0) def main(): # 设置信号处理器捕获Ctrl+C signal.signal(signal.SIGINT, signal_abort_script) # 无限循环输出运行状态 while True: print("程序运行中...", flush=True) if __name__ == "__main__": main()
修改说明
- 将信号处理函数的第一个参数改为
signum,避免和signal模块名冲突,参数名也更具语义(代表信号编号)。 - 在处理函数中添加退出提示,并使用
flush=True强制刷新输出缓冲区,确保提示信息能立即显示在终端。 - 循环内的
print也添加flush=True,避免输出堆积在缓冲区,同时让运行状态更清晰。
内容的提问来源于stack exchange,提问作者user16993210
相关产品推荐
相关产品推荐

