изящное прерывание цикла while в ноутбуке ipython

Я выполняю анализ данных в блокноте ipython. Отдельный компьютер собирает некоторые данные и сохраняет их в папку сервера, а мой ноутбук периодически сканирует этот сервер на наличие новых файлов и анализирует их.

Я делаю это в цикле while, который каждую секунду проверяет наличие новых файлов. В настоящее время я настроил его на прекращение при анализе некоторого количества новых файлов. Однако я хочу вместо этого завершить нажатие клавиши.

Я попытался перехватить прерывание клавиатуры, как предлагается здесь: Как завершить цикл while нажатием клавиши?

но, похоже, он не работает с ноутбуком 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

Но я вижу, что цикл в основном игнорирует нажатия кнопок.


person wenhoo    schedule 17.05.2016    source источник
comment
Для справки, причина, по которой это не работает, заключается в том, что ядро ​​​​не обрабатывает нажатие кнопки до тех пор, пока не закончит работу с ячейкой.   -  person Thomas K    schedule 17.05.2016


Ответы (1)


Вы можете вызвать KeyboardInterrupt в ноутбуке через меню "Ядро --> Прерывание".

Так что используйте это:

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

как предложено здесь и щелкните этот пункт меню.

person Mike Müller    schedule 17.05.2016
comment
KeyboardInterrupt это то, как работает кнопка остановки. - person rjurney; 22.08.2019
comment
Не работает !!! - person Thư Sinh; 27.07.2021