Как сделать цикл Python прерываемым ^ C в Unix? - PullRequest
0 голосов
/ 24 июня 2018

Я написал скрипт на python, который ищет рекомендуемый сервер на nordvpn.com и запускает соответствующий vpn. В этом сценарии есть часть, где я уверяю, что есть доступ в Интернет. Когда я запускаю скрипт из терминала, я не могу прервать этот цикл нажатием ^ C, если нет соединения. Как я могу адаптировать код так, чтобы цикл прерывался?

Вот соответствующая часть кода:

#!/usr/bin/env python3

import re
import os
from selenium import webdriver

if __name__ == '__main__':

    # ...

    # wait for internet connection and load geckodriver
    while True:
        try:
            browser = webdriver.Firefox(
                executable_path=r'/home/maddin/bin/.vpn/geckodriver',
                log_path='/dev/null')
            break
        except:
            print("not connected yet, trying again....")

    # ...

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

это из-за вашего блока except по умолчанию, который принимает все прерывания, включая KeyboardInterrupt, который является вашим ^ C

while True:
    try:
        browser = webdriver.Firefox(
            executable_path=r'/home/maddin/bin/.vpn/geckodriver',
            log_path='/dev/null')
        break
    except KeyboardInterrupt:
        # do whatever you want to do on ^C
    except:
        print("not connected yet, trying again...."
0 голосов
/ 24 июня 2018

Использование except: перехватит все ошибки, включая KeyboardInterrupt. Вместо этого вы можете использовать except Exception:, который не будет ловить SystemExit, KeyboardInterrupt и GeneratorExit. Это позволит вам разорвать цикл с помощью Ctrl + C. Вы можете найти больше информации здесь и здесь .

...