我想撰寫一個始終運行并且僅在按下 Ctr-C 時才停止運行的 python 程式(run.py)。這就是我實作它的方式:
包裝器.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()
運行.py:
print('aaaaa')
print('bbbbb')
但是,當我在運行 wrapper.py 的終端中按住滑鼠左鍵并選擇文本時,此事件被錯誤地理解為 Ctr-C,然后 wrapper.py 停止運行 run.py。我的問題是如何防止在python(Unix)中將滑鼠事件讀取為KeyboardInterrupt。謝謝!
終端
uj5u.com熱心網友回復:
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)
uj5u.com熱心網友回復:
源代碼沒有問題。該問題是由字典軟體引起的。該軟體具有選擇要翻譯的單詞的功能。通過某種方式它將滑鼠事件(選擇單詞)轉換為 Ctr-C 然后上面的程式退出。當我關閉字典軟體時,問題就消失了。我將在這里關閉執行緒
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/407639.html
標籤:
上一篇:在unix中重命名檔案名
