You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

修改说明

  1. 将信号处理函数的第一个参数改为signum,避免和signal模块名冲突,参数名也更具语义(代表信号编号)。
  2. 在处理函数中添加退出提示,并使用flush=True强制刷新输出缓冲区,确保提示信息能立即显示在终端。
  3. 循环内的print也添加flush=True,避免输出堆积在缓冲区,同时让运行状态更清晰。

内容的提问来源于stack exchange,提问作者user16993210

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:43:28