Есть ли способ сделать Python интерактивным в середине скрипта? - PullRequest
16 голосов
/ 09 апреля 2010

Я бы хотел сделать что-то вроде:

do lots of stuff to prepare a good environement
become_interactive
#wait for Ctrl-D
automatically clean up

Возможно ли это с python? Если нет, вы видите другой способ сделать то же самое?

Ответы [ 6 ]

12 голосов
/ 09 апреля 2010

Используйте флаг -i при запуске Python и установите обработчик atexit для запуска при очистке.

Файл script.py:

import atexit
def cleanup():
    print "Goodbye"
atexit.register(cleanup)
print "Hello"

и затем вы просто запускаете Python с флагом -i:

C:\temp>\python26\python -i script.py
Hello
>>> print "interactive"
interactive
>>> ^Z

Goodbye
9 голосов
/ 09 апреля 2010

Модуль code позволит вам запустить Python REPL.

6 голосов
/ 03 октября 2013

С IPython v1.0 вы можете просто использовать

from IPython import embed
embed()

с дополнительными параметрами, показанными в документах .

6 голосов
/ 12 апреля 2010

Для уточнения ответа IVA: embedding-a-shell , инкорпорирующее code и Ipython.

def prompt(vars=None, message="welcome to the shell" ):
    #prompt_message = "Welcome!  Useful: G is the graph, DB, C"
    prompt_message = message
    try:
        from IPython.Shell import IPShellEmbed
        ipshell = IPShellEmbed(argv=[''],banner=prompt_message,exit_msg="Goodbye")
        return  ipshell
    except ImportError:
        if vars is None:  vars=globals()
        import code
        import rlcompleter
        import readline
        readline.parse_and_bind("tab: complete")
        # calling this with globals ensures we can see the environment
        print prompt_message
        shell = code.InteractiveConsole(vars)
        return shell.interact

p = prompt()
p()
5 голосов
/ 09 апреля 2010

Не совсем то, что вам нужно, но python -i запустит интерактивное приглашение после выполнения скрипта.

-i: интерактивная проверка после запуска сценария (также PYTHONINSPECT = x) и принудительные запросы, даже если stdin не является терминалом

$ python -i your-script.py
Python 2.5.4 (r254:67916, Jan 20 2010, 21:44:03) 
...
>>> 
0 голосов
/ 09 апреля 2010

Вы можете вызвать сам Python:

import subprocess

print "Hola"

subprocess.call(["python"],shell=True)

print "Adios"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...