使用Ctrl+C停止python程序

154 投票
14 回答
283525 浏览
提问于 2025-04-15 14:00

我有一个用Python写的脚本,它使用了线程,并且发起了很多HTTP请求。我觉得发生的情况是,当一个HTTP请求(使用urllib2)在读取数据时,它会阻塞,这样就无法响应CtrlC来停止程序。有没有什么办法可以解决这个问题?

14 个回答

58

如果你在Python的命令行界面里运行程序,可以按 Ctrl + Z 来暂停它。否则,你需要找到正在运行的 python 进程,然后把它结束掉。

113

当你在运行一个Python程序时按下 Ctrl + c,Python会抛出一个叫做 KeyboardInterrupt 的异常。这通常发生在那些需要频繁发送HTTP请求的程序中,这类程序往往会有很多处理异常的代码。如果 try-except 代码块中的 except 部分没有明确指定要捕获哪些异常,它就会捕获所有的异常,包括你刚刚引发的 KeyboardInterrupt。一个写得好的Python程序会利用 Python的异常层次结构,只捕获那些从 Exception 派生的异常。

#This is the wrong way to do things
try:
  #Some stuff might raise an IO exception
except:
  #Code that ignores errors

#This is the right way to do things
try:
  #Some stuff might raise an IO exception
except Exception:
  #This won't catch KeyboardInterrupt

如果你无法更改代码(或者需要强制结束程序以使你的更改生效),你可以尝试快速按下 Ctrl + c。第一个 KeyboardInterrupt 异常会让你的程序跳出 try 块,希望后续的 KeyboardInterrupt 异常能在程序不再处于 try 块时被触发。

221

在Windows系统上,最简单有效的方法就是按下 CtrlBreak。这样可以立刻停止所有的Python脚本!

(注意,有些键盘上,“Break”这个键可能标记为“Pause”。)

撰写回答