如何在 unix 上使 python 循环可被 ^C 中断?

How to make python loop interruptible by ^C on 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....")

    # ...

使用 except: 将捕获所有错误,包括 KeyboardInterrupt。您可以改用 except Exception:,它不会捕获 SystemExitKeyboardInterruptGeneratorExit。这将允许您使用 Ctrl + C 打破循环。您可以找到更多信息 and here.

这是因为您的默认 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...."