2016-07-25 106 views
0

每次我按CTRL-C,當我運行它顯示它正在執行什麼路線,然後一個程序上寫着:如果用戶按下CTRL C或使用鍵盤Interupt,如何顯示消息?

Keyboard Interrupt 

不過,我運行的附加信息,以文本文件的程序。有人在按CTRL-C的過程中只會附加代碼在被中斷之前要做的事情。

我聽說過try and except,但是如果我在開始時調用它,並且在嘗試階段按下CTRL C,它會起作用嗎?

怎樣讓這個如果任何時候在程序中有人按下CTRL-C將無法運行該程序,恢復一切它這樣做遠,說:

Exiting Program 
+0

您需要捕獲^ C處理程序並執行關閉功能來處理它。 –

+0

你可以發佈它作爲答案,並描述你的意思。 –

+0

http://stackoverflow.com/questions/4205317/capture-keyboardinterrupt-in-python-without-try-except這裏有一種方法來處理它:)只是搜索了一下 –

回答

2

試試看吧自己:

這工作(如果被執行的代碼你的機器上過快的for循環迭代增加一個零):

a = 0 

try: 
    for i in range(1000000): 
     a = a + 1 
except (KeyboardInterrupt, SystemExit): 
    print a 
    raise 

print a 

這不起作用,因爲數據保存在中間的文件中。 try塊不撤消將數據保存到文件。

a = 0 

try: 
    for i in range(1000000): 
     if a == 100: 
      with open("d:/temp/python.txt", "w") as file: 
       file.write(str(a)) 

     a = a + 1 
except (KeyboardInterrupt, SystemExit): 
    raise 

This Works。數據僅在最後保存。

a = 0 

try: 
    for i in range(1000000): 
     a = a + 1 
except (KeyboardInterrupt, SystemExit): 
    raise 

with open("d:/temp/python.txt", "w") as file: 
    file.write(str(a)) 

因此準備try塊內的信息,並保存之後。

另一種可能性:使用原始數據保存臨時備份文件,並將備份文件重命名爲except塊中的原始文件名。

+0

謝謝。我會盡快嘗試一次 –

+0

當我寫入文件需要一些時間。如果它產生和準備信息,然後當它開始寫入除了和某人按下ctrl-c之後呢? –

+0

那麼,在某些時候,你必須開始寫入文件。如果在寫入新數據之前擦除舊文件內容,則會丟失它們。如果這還不夠,請保留備份文件直到程序結束。或者將新數據附加到文件的末尾,並在文件末尾刪除舊文件。但是,刪除備份文件或刪除舊內容也需要一些時間;如果Ctrl + C被按下,那麼你也不能撤消。 –

相關問題