2015-03-03 4 views
1

До этого я смог убить скрипт python, запущенный с execfile("somescript.py"), в то время как в интерпретаторе нажав Ctrl + C, не убивая интерпретатора. Это приведет к исключению KeyboardInterrupt, которое остановит сценарий и позвольте мне снова использовать интерпретатор. Однако теперь (я подозреваю, что это связано с более новой версией python), когда я нажимаю Ctrl + C при запуске скрипта, он иногда также убивает интерпретатор, бросая меня обратно в командную строку Linux. По какой-то причине это не происходит каждый раз, когда я убиваю скрипт с помощью Ctrl + C.Остановить запуск сценария python без убийства интерпретатора

Это раздражает, потому что я часто использую интерпретатор python в интерактивном режиме, то есть я запускаю некоторый скрипт с execfile("somescript.py"), играю с данными, которые он производит в интерпретаторе, и т. Д. До этого, если какой-то скрипт застрял, я смог его убить и не терять данные, которые он вычислил (или я сохранил в переменных), прежде чем застревать.

Так что мой вопрос: Как я могу убить скрипт python, запущенный с execfile() в интерпретаторе, без убийства интерпретатора?

+1

Почему бы не поймать исключение и 'break' независимо от цикла вы работаете? – jonrsharpe

+0

Может случиться так, что скрипт случайно заканчивается как раз перед тем, как у него появится возможность справиться с прерыванием, и он оказывается пойманным интерпретатором. – BartoszKP

+0

Я не думаю, что это так, потому что, если у меня ничего не работает в интерпретаторе, я могу нажать ctrl + C столько, сколько захочу, и интерпретатор не будет убит. Я думаю, что это поведение имеет какое-то отношение к тому факту, что я использую внешнюю (не-питон) библиотеку внутри моего скрипта, и если я убью скрипт, пока он что-то выполняет из этих библиотек, весь интерпретатор как-то умирает. – Echows

ответ

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

+0

@ Показывает, что проблема прерывистая, тогда вам нужно работать над воспроизведением проблемы. Если вы не можете исправить проблему после ее обнаружения, вы можете задать другой вопрос. – motoku

 Смежные вопросы

  • Нет связанных вопросов^_^