如何在cygwin中运行的Python中拦截ctrl + c命令

5

我在Cygwin shell内运行Python脚本,但无法拦截ctrl+c命令。

这是我的Python脚本:

#!/cygdrive/c/python27/python.exe -u
import signal
import sys
def signal_handler(sig, frame):
    print('You pressed Ctrl+C!')
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGBREAK, signal_handler)

print('Press Ctrl+C')
input()

使用try/catch方法,仍然无法正常工作。

#!/cygdrive/c/python27/python.exe -u
try:
    input()
except KeyboardInterrupt:
    print('Interrupted')

但是这些处理程序都无法处理 ctrl + c 命令。Cygwin 版本为 1.7.25(0.270/5/3),我正在使用 Python 2.7。出了什么问题?


看起来你正在使用Cygwin shell中的Windows版本Python。这不会按预期工作。您可以使用Cygwin安装程序安装Python2和几个不同的Python3版本之一。同时,将您的Cygwin安装升级到最新版本3.0.6(0.338/5/3)。您的版本已经过时多年了。提醒一下:Python 2.7将于2020年1月1日到达生命周期终点(不到8个月)。所有新工作都应使用Python 3.6或更高版本。 - Doug Henderson
1个回答

1

我在MSYS环境(https://www.msys2.org/)的mingw64终端中遇到了同样的问题。最终我使用winpty工具解决了这个问题:

winpty python3 my_python_script.py

这样信号处理程序就能按预期工作。我不确定你的Cygwin发行版中是否也有winpty工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接