3
我有我的代碼,它運行到無窮遠。我想要的是,如果在unix命令窗口中,如果用戶輸入ctrl C,我希望程序完成當前循環,然後退出循環。所以我想讓它突破,但我希望它能夠完成當前的循環。正在使用ctrl C好嗎?我應該看看不同的輸入嗎?無限循環和用戶輸入作爲終止
我有我的代碼,它運行到無窮遠。我想要的是,如果在unix命令窗口中,如果用戶輸入ctrl C,我希望程序完成當前循環,然後退出循環。所以我想讓它突破,但我希望它能夠完成當前的循環。正在使用ctrl C好嗎?我應該看看不同的輸入嗎?無限循環和用戶輸入作爲終止
要正確完整地按照您的要求進行操作,這有點複雜。
基本上你想要捕獲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
在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
@Yuki:向註釋中添加代碼失去了與Python代碼混淆的格式,但看起來你基本上是對的。你需要做'bh = BreakHandler(); bh.enable()'在循環之前,當然。 – 2010-08-10 23:02:56
我有這樣的:(我不知道此刻如何把代碼在這裏變成一個更好的格式) IH = BreakHandler() ih.enable() 而(真): *做力所能及的事* 如果ih.trapped: break ih.disable() – Yuki 2010-08-11 15:03:12