我想写一个python程序(run.py(,它总是运行,只有在按下Ctr-C时才停止运行。这就是我实现它的方式:
wrapper.py:
import subprocess
import signal
def sig_handler(signum, frame):
res = input("Ctrl-c was pressed. Do you really want to exit? y/n ")
if res == 'y':
exit(1)
signal.signal(signal.SIGINT, sig_handler)
while(True):
p = None
p = subprocess.Popen("python run.py", shell=True)
stdout, stderr = p.communicate()
run.py:
print('aaaaa')
print('bbbbb')
然而,当我按住鼠标左键并在运行wrapper.py的终端中选择文本时,此事件被错误地理解为Ctr-C,然后wrapper.py停止运行run.py。我的问题是如何防止在python(Unix(中将鼠标事件读取为KeyboardInterrupt。谢谢
终端
您可以选择使用异常,而不是使用像signal
这样的模块来实现这一点,因为您的程序将接收键盘中断是一种非常特殊的情况。
#!/usr/bin/env python3
import sys
def main() -> int:
try:
while True:
print(sys.argv)
except KeyboardInterrupt as e:
return 0
if __name__ == '__main__':
try:
sys.exit(main())
except Exception as e:
print(f'Error: {e}', file=sys.stderr)
sys.exit(1)
源代码没有问题。这个问题是由词典软件引起的。该软件具有选择要翻译的单词的功能。通过某种方式,它将鼠标事件(选择单词(转换为Ctr-C,然后上面的程序退出。当我关闭词典软件时,问题就消失了。我将关闭这里的线程