Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止运行python脚本而不终止解释器_Python_Interpreter_Kill Process - Fatal编程技术网

停止运行python脚本而不终止解释器

停止运行python脚本而不终止解释器,python,interpreter,kill-process,Python,Interpreter,Kill Process,在此之前,我能够在解释器中通过按Ctrl+C杀死以execfile(“somescript.py”)启动的python脚本,而不杀死解释器。这将导致键盘中断异常,该异常将停止脚本并让我再次使用解释器。然而,现在(我怀疑这是新版本的python带来的),当我在运行脚本时按下Ctrl+C时,有时还会杀死解释器,使我返回Linux命令行。出于某种原因,这并不是每次我用Ctrl+C杀死脚本时都会发生的 这很烦人,因为我经常以交互方式使用python解释器,例如,我使用execfile(“somescri

在此之前,我能够在解释器中通过按
Ctrl+C
杀死以
execfile(“somescript.py”)
启动的python脚本,而不杀死解释器。这将导致
键盘中断
异常,该异常将停止脚本并让我再次使用解释器。然而,现在(我怀疑这是新版本的python带来的),当我在运行脚本时按下
Ctrl+C
时,有时还会杀死解释器,使我返回Linux命令行。出于某种原因,这并不是每次我用
Ctrl+C
杀死脚本时都会发生的

这很烦人,因为我经常以交互方式使用python解释器,例如,我使用
execfile(“somescript.py”)
运行一些脚本,在解释器中处理它生成的数据,等等。以前,如果某个脚本卡住了,我能够杀死它,而不会丢失它计算的数据(或者我存储在变量中)在被卡住之前


因此,我的问题是,现在如何在不杀死解释器的情况下杀死解释器中以
execfile()
开头的python脚本?

通常,这是通过
try
语句完成的:

>>> def f():
...     try:
...         exec(open("somefile.py").read())
...     except Exception as e: print(e)
... 
>>> f()
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in f
  File "<string>", line 4, in <module>
  File "<string>", line 3, in g
KeyboardInterrupt
>>>

为什么不捕获异常和
中断
正在运行的任何循环?可能会发生脚本在有机会处理中断之前意外完成,最终被解释器捕获。我不认为是这样,因为如果解释器中没有运行任何东西,我可以随心所欲地按ctrl+C键,这样解释器就不会被杀死。我认为这种行为与我在脚本中使用外部(非python)库这一事实有关,如果我在脚本从这些库执行某些内容时杀死脚本,那么整个解释器都会死掉。我当然可以这样做,但我不想用try-catch逻辑把我所有的脚本弄得乱七八糟,以防我有时想停止脚本。我要问的是如何让python解释器像以前一样工作,即当我按下Ctrl+C时,解释器永远不会被杀死。事实上,现在我尝试了,如果我只是在不做任何事情的情况下按下Ctrl+C,它不会杀死解释器。它只是在我运行某些脚本时偶尔会杀死它。@Echows如果问题是间歇性的,那么您需要重新生成问题。如果发现问题后无法解决,则可以问另一个问题。
def g():
    while True: pass
g()