代码之家  ›  专栏  ›  技术社区  ›  maddingl

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

  •  0
  • maddingl  · 技术社区  · 6 年前

    我已经编写了一个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 回复  |  直到 6 年前
        1
  •  2
  •   roganjosh    6 年前

    使用 except: 将捕获所有错误,包括 KeyboardInterrupt 是的。你可以用 except Exception: 不会被抓住的 SystemExit 我是说, 键盘中断 GeneratorExit 是的。这将允许您使用ctrl+c来中断循环。您可以找到更多信息 here here 是的。

        2
  •  0
  •   user8033142    6 年前

    这是因为你的违约 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...."
    
    推荐文章