Как сделать цикл Python прерываемым ^C в Unix?

Я написал скрипт на 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 ответа

Решение

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

Это из-за вашего дефолта 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...."
Другие вопросы по тегам