2010-08-10 86 views
3

我有我的代碼,它運行到無窮遠。我想要的是,如果在unix命令窗口中,如果用戶輸入ctrl C,我希望程序完成當前循環,然後退出循環。所以我想讓它突破,但我希望它能夠完成當前的循環。正在使用ctrl C好嗎?我應該看看不同的輸入嗎?無限循環和用戶輸入作爲終止

回答

3

要正確完整地按照您的要求進行操作,這有點複雜。

基本上你想要捕獲Ctrl-C,設置一個標誌,並繼續,直到檢查該標誌的循環開始(或結束)。這可以使用signal模塊完成。幸運的是,有人已經這樣做了,您可以使用示例linked中的代碼。

編輯:根據您在下面評論,類BreakHandler的典型用法是:

ih = BreakHandler() 
ih.enable() 
for x in big_set: 
    complex_operation_1() 
    complex_operation_2() 
    complex_operation_3() 
    # Check whether there was a break. 
    if ih.trapped: 
     # Stop the loop. 
     break 
ih.disable() 
# Back to usual operation 
+0

在big_set X: complex_operation_1() complex_operation_2() complex_operation_3() #檢查是否有一次休息。如果ih.trapped: #停止循環。 休息 ih.disable() #回到通常的操作... 所以這一部分,我需要做的唯一的事情來啓動它 如果ih.trapped: #停止循環。 break ih.disable() 然後我的代碼結束了嗎? – Yuki 2010-08-10 22:28:11

+0

@Yuki:向註釋中添加代碼失去了與Python代碼混淆的格式,但看起來你基本上是對的。你需要做'bh = BreakHandler(); bh.enable()'在循環之前,當然。 – 2010-08-10 23:02:56

+0

我有這樣的:(我不知道此刻如何把代碼在這裏變成一個更好的格式) IH = BreakHandler() ih.enable() 而(真): *做力所能及的事* 如果ih.trapped: break ih.disable() – Yuki 2010-08-11 15:03:12