使用ctrl + c停止python

我有一个python脚本,使用线程和大量的HTTP请求。 我认为发生的事情是,当一个HTTP请求(使用urllib2)正在读取时,它正在阻止,而不是响应Ctrl C来停止程序。 有没有办法解决?

唯一确定的方法是使用Ctrl Break 。 立即停止每个Python脚本!

(请注意,在某些键盘上,“Break”标记为“Pause”。)

在运行python程序时按Ctrl + c将导致python引发KeyboardInteruptexception。 很多HTTP请求的程序很可能会有大量的exception处理代码。 如果try-except块的except部分没有指定应该捕获哪些exception,它将捕获所有exception,包括刚刚引起的KeyboardInterupt。 一个正确编码的python程序将使用pythonexception层次结构,并只捕获从exception派生的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 KeyboardInterupt 

如果您不能更改代码(或者需要终止程序以使您的更改生效),则可以尝试快速按Ctrl + c 。 第一个KeyboardInteruptexception会将你的程序从try块中敲出来,希望当程序在try块之外时,将会引发KeyboardInterrupt之后的exception。

如果它正在Python shell中运行,请使用Ctrl + Z ,否则findpython进程并杀死它。

中断过程是硬件和操作系统相关的。 所以你会有非常不同的行为取决于你在哪里运行你的Python脚本。 例如,在Windows机器上,我们有Ctrl + CSIGINT )和Ctrl + BreakSIGBREAK )。

所以尽pipeSIGINT在所有系统上都存在,并且可以被处理和捕获,但是SIGBREAK信号是Windows专用的(并且可以在CONFIG.SYS中禁用),并且由BIOS作为中断向量INT 1Bh来处理 ,这就是为什么这个键比其他任何东西都强大得多。 所以,如果你使用的是一些* nix风格的操作系统,你会得到不同的结果取决于实现,因为那个信号不存在,但其他人。 在Linux中,您可以通过以下方式查看可用信号:

 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE 9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG 17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD 21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGPWR 30) SIGUSR1 31) SIGUSR2 32) SIGRTMAX 

所以如果你想在Linux系统上捕获CTRL+BREAK 信号 ,你必须检查他们已经映射了哪个键的POSIX信号 。 受欢迎的映射是:

 CTRL+\ = SIGQUIT CTRL+D = SIGQUIT CTRL+C = SIGINT CTRL+Z = SIGTSTOP CTRL+BREAK = SIGKILL or SIGTERM or SIGSTOP 

事实上,在Linux下有更多的function, SysRq (系统请求)键可以使用它自己的生活 …

这篇文章是旧的,但我最近遇到了同样的问题, CTRL+C没有终止我的Linux上的Python脚本。 我用CTRL + \SIGQUIT )。

在Mac /terminal中:

  1. Show Inspector(在terminal窗口或Shell> Show Inspector中右击)
  2. 点击“正在运行的进程”上方的设置图标
  3. 从“信号处理组”(杀死,终止,中断等)下的选项列表中进行select。

ctrl + q将立即停止正在运行的代码并closures所有窗口。