2010-04-09 19 views
15

me gustaría hacer algo como:¿Hay alguna manera de hacer que python se convierta en interactivo en medio de un script?

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

¿Es posible con el pitón Si no es así, ¿cree que otra forma de hacer lo mismo?

+3

¡Gracias a todos! Para el registro, la forma más fácil de utilizar el módulo de código para lograr esto es la siguiente: código de importación code.interact (= globales locales()) –

+2

Para obtener las variables locales en el espacio de nombres, así, se necesitan ' code.interact (local = dict (globals(), ** locals()) '. Note la adición de' ** locals'. Me preguntaba esta pregunta yo mismo, y su comentario fue la mejor respuesta que encontré: -) –

Respuesta

5

Con IPython v1.0, puede simplemente usar

from IPython import embed 
embed() 

con más opciones que aparecen en la docs.

+0

Puede usar esto en cualquier lugar y conserva el alcance. –

-1

Puede llamar Pitón en sí:

import subprocess 

print "Hola" 

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

print "Adios" 
8

El módulo code le permitirá iniciar un REPL Python.

5

No es exactamente lo que quiere, pero Python -i iniciará el aviso interactivo después de ejecutar el script.

-i: controlar interactivamente después de ejecutar el script, (también PYTHONINSPECT = x) y la fuerza de indicaciones, incluso si la entrada estándar no parece ser un terminal

$ python -i your-script.py 
Python 2.5.4 (r254:67916, Jan 20 2010, 21:44:03) 
... 
>>> 
10

usar la bandera -i cuando inicie Python y configure un controlador atexit para que se ejecute durante la limpieza.

script.py del archivo:

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

y luego que acaba de empezar Python con la bandera -i:

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

Goodbye 
6

dar más detalles sobre la respuesta de IVA: embedding-a-shell, incoporating code y 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() 
Cuestiones relacionadas