Выход в командную строку в Python - PullRequest
2 голосов
/ 06 апреля 2010

У меня есть скрипт, который я хочу завершить досрочно при некоторых условиях:

if not "id" in dir():
     print "id not set, cannot continue"
     # exit here!
# otherwise continue with the rest of the script...
print "alright..."
[ more code ]

Я запускаю этот сценарий, используя execfile("foo.py") из интерактивного приглашения Python, и я хотел бы, чтобы сценарий завершил работу, возвращаясь к интерактивному интерпретатору. Как мне это сделать? Если я использую sys.exit(), интерпретатор Python завершается полностью.

Ответы [ 4 ]

7 голосов
/ 06 апреля 2010

в интерактивном переводчике; поймать SystemExit поднятый sys.exit и игнорировать его:

try:
    execfile("mymodule.py")
except SystemExit:
    pass
3 голосов
/ 06 апреля 2010

Поместите свой блок кода в метод и вернитесь из этого метода, например, так:

def do_the_thing():
    if not "id" in dir():
         print "id not set, cannot continue"
         return
         # exit here!
    # otherwise continue with the rest of the script...
    print "alright..."
    # [ more code ]

# Call the method
do_the_thing()

Кроме того, если нет веской причины использовать execfile (), этот метод, вероятно, следует поместить вмодуль, где его можно вызвать из другого скрипта Python, импортировав его:

import mymodule
mymodule.do_the_thing()
2 голосов
/ 07 апреля 2010

Я немного помешан на ipython для интерактивной работы, но посмотрите учебник по встраивание оболочки для более надежного решения, чем это (это ваш самый прямой путь) .

0 голосов
/ 07 апреля 2010

Вместо использования execfile, вы должны сделать скрипт импортируемым ( name == ' main защита, разделены на функции и т. Д.), А затем вызывать функции из интерпретатора ,

...