Как сделать цикл 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...."