2016-12-04 89 views
0

我有一個python腳本有很多問題,但所有這些腳本的根本原因是它不會對鍵盤中斷做出反應。我猜這個問題要麼是我使用SSH 只有來連接,或者我正在使用線程。這是因爲MCV,因爲我可以使它:無功能的鍵盤中斷

from threading import Thread   
import time, random                                    

def distance():                                      
    while True:                                       
     print "hi"                                    

def drive():                                      
    while True:                                       
     print "hi"                                    

distance = Thread(target=distance)                                
drive = Thread(target=drive)                                  
distance.start()                                     
drive.start() 

如果我停止使用kill PID停止,但我不希望有這樣做,所有的時間。

回答

1

你可以簡單地用Python「脫鉤」 SIGINT,使其恢復到系統默認的行爲,這是結束該進程:

import signal 
signal.signal(signal.SIGINT, signal.SIG_DFL) 

請在開始你的線程,然後按Ctrl-C之前,而不是生成KeyboardInterrupt,將簡單地終止程序。

+0

問題是我需要它來觸發異常來運行'pz.cleanup'(在最終的程序中),否則我使用的電機將繼續轉動。雖然這很有用,但我認爲它不適合我的目的。 –

+0

@sir_ian:在這種情況下,只需定義一個清理函數,它可以在關閉時執行您所需的任何操作,並將該函數傳遞給'signal.signal()'來代替'SIG_DFL'。 –

+0

天才(填充) –