2016-05-17 7 views
2

私はipythonノートブックでいくつかのデータ分析を実行しています。別のマシンがデータを収集してサーバーフォルダに保存し、ノートブックは定期的にこのサーバーをスキャンして新しいファイルを探し、分析します。ipythonノートブックでのwhileループの優雅な割り込み

これは、毎秒新しいファイルをチェックするwhileループで行います。現在、いくつかの新しいファイルが分析されると終了するように設定しています。しかし、私は代わりにキー押しを終了したい。

ここで示唆したように、私は、試し引くキーボード割り込みを試してみました:How to kill a while loop with a keystroke?

をしかし、ipythonノート(私はWindowsを使用しています)で動作するようには思えません。

openCVのキーウェイトを使用すると私にとってはうまくいくが、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を起動するには、「カーネル - >割り込み」メニューを使用します。 here提案として

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

をして、このメニュー項目をクリックしてください:

だから、これを使用しています。

+0

あなたのために働きますか? –

+0

はい、これは動作します。ありがとうございました! – wenhoo

関連する問題