2015-03-03 49 views
1

之前,我能够杀死一个以execfile("somescript.py")开头的python脚本,而在解释器中按Ctrl + C而不会终止解释器。这将导致会停止脚本的异常,并让我再次使用解释器。但是,现在(我怀疑这是python的更新版本),当我在运行脚本时按Ctrl + C时,它有时也会杀死解释器,并将我抛到Linux命令行。由于某些原因,每当我用Ctrl + C杀死一个脚本时就不会发生这种情况。停止运行python脚本而不杀死解释器

这很烦人,因为我经常交互地使用python解释器,也就是说,我运行一些脚本,使用execfile("somescript.py"),在解释器中产生的数据中玩耍等。之前,如果某个脚本卡住了,我可以杀死它并且在卡住之前不会丢失它计算的数据(或者我已经存储在变量中)。

所以我的问题是,我现在如何杀死一个在解释器中以execfile()开头的python脚本而不会导致解释器被破坏?

+1

为什么不捕获异常和'break'你正在运行什么循环? – jonrsharpe 2015-03-03 14:10:56

+0

可能发生脚本意外地在它有机会处理中断之前完成,并且最终被翻译抓住。 – BartoszKP 2015-03-03 14:21:49

+0

我不认为是这种情况,因为如果我没有在解释器中运行的任何东西,我可以按ctrl + C尽可能多地按我的意愿解释并不会被杀死。我认为这种行为与我在脚本中使用外部(非python)库有关,如果我在从这些库中执行某些内容时终止脚本,整个解释器就会死亡。 – Echows 2015-03-03 16:37:34

回答

0

通常情况下,这是一个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 
>>> 

somefile.py

def g(): 
    while True: pass 
g() 
+0

我当然可以做到这一点,但我不想用try-catch逻辑混淆我的所有脚本,以防万一我有时想停止脚本。我问的是如何让python解释器像以前一样工作,也就是说,当我按下Ctrl + C时,解释器不会被杀死。实际上,现在我尝试了,如果我只是在无所事事的情况下按Ctrl + C。它在我运行某些脚本时偶尔会被杀死。 – Echows 2015-03-03 16:35:11

+0

@如果问题是间歇性的,那么您需要重新解决问题。如果您发现问题后无法解决问题,则可以提出另一个问题。 – motoku 2015-03-03 16:36:44