2016-05-17 141 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