Почему KeyboardInterrupt не работает для Python-сценария Python?Альтернативный способ выхода из программы / цикла? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь завершить простую программу автоматизации с графическим интерфейсом, которая просто открывает веб-страницу и затем нажимает на определенное место на странице каждые 0,2 секунды, пока я не скажу ей остановиться.Я хочу, чтобы мой код выполнялся и его цикл выполнялся бесконечно, пока указанная привязка клавиш не разорвет цикл (или всю программу).Я начал с классического KeyboardInterrupt, который якобы позволяет CTRL + C выходить из программы.Вот мой код:

import webbrowser, pyautogui, time
webbrowser.open('https://example.com/')
print('Press Ctrl-C to quit.')
time.sleep(5)
#pyautogui.moveTo(1061, 881)
try:
    while True:
            time.sleep(0.2)
            pyautogui.click(1061,881)
except KeyboardInterrupt:
    print('\nDone.')

К сожалению, KeyboardInterrupt и использование CTRL-C для выхода, похоже, не работают для этого сценария (вероятно, из-за цикла while?).Это заставляет цикл продолжать работать бесконечно без остановки.Итак, мои вопросы: почему не работает прерывание клавиатуры?Я видел подобные примеры в других скриптах.Кроме того, если KeyboardInterrupt не работает, есть ли способ кодировать простую привязку клавиш для выхода из программы / цикла?

1 Ответ

0 голосов
/ 13 октября 2018

Я подозреваю, что это может быть связано с тем, что у вас другое окно, отличное от сценария;когда вы используете webbrowser, открываете веб-страницу и нажимаете на нее, оно перемещает ваше активное окно на веб-страницу, а не на консоль Python.Так что ctrl+c будет выдавать KeyboardInterrupt только тогда, когда консоль является вашим активным окном.Ваш сценарий может быть на самом деле правильным;но ваше активное окно не на Python, поэтому вам придется проверить его, нажав обратно в консоль Python во время работы программы.

Чтобы ответить на ваш комментарий: Нет, я не знаю другого «быстрого» способа сделать такую ​​вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...