2016-05-17 139 views
2

我在ipython筆記本中運行一些數據分析。一臺獨立的機器收集一些數據並將它們保存到服務器文件夾中,筆記本電腦會定期掃描此服務器以查找新文件並分析它們。ipython筆記本中while循環的優雅中斷

我在while循環中檢查每一秒是否有新文件。目前我已經設置它來分析一些新文件時終止。不過,我想要在按鍵時終止。

我試圖嘗試醒目鍵盤中斷,因爲這裏建議:How to kill a while loop with a keystroke?

,但它似乎並沒有與IPython的筆記本電腦(我使用Windows)工作。

使用openCV的keywait對我很有用,但我想知道是否有其他方法,而不必導入opencv。

我也試圖實現一個按鈕的小工具,中斷循環,因爲這樣的:

from ipywidgets import widgets 
import time 
%pylab inline 

button = widgets.Button(description='Press to stop') 
display(button) 

class Mode(): 
    def __init__(self): 
     self.value='running' 

mode=Mode() 

def on_button_clicked(b): 
    mode.value='stopped' 

button.on_click(on_button_clicked) 

while True: 
    time.sleep(1) 
    if mode.value=='stopped': 
     break 

但我看到的是,循環基本上忽略了按下按鈕。

+2

作爲參考,這不起作用的原因是內核不處理按鈕點擊,直到它完成運行單元。 –

回答

3

您可以通過菜單「內核 - >中斷」在筆記本中觸發KeyboardInterrupt

所以用這個:

try: 
    while True: 
     do_something() 
except KeyboardInterrupt: 
    pass 

的建議here並單擊該菜單項。

+0

它適合你嗎? –

+0

是的,這是有效的。謝謝! – wenhoo