2010-04-09 11 views
15

mi piacerebbe fare qualcosa di simile:C'è un modo per rendere Python interattivo nel mezzo di uno script?

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

E 'possibile con python In caso contrario, vedete un altro modo di fare la stessa cosa?

+3

Grazie a tutti! Per la cronaca, il modo più semplice per utilizzare il modulo di codice per raggiungere questo obiettivo è la seguente: codice di importazione code.interact (locali = globali()) –

+2

Per ottenere le variabili locali nello spazio dei nomi così, è necessario ' code.interact (local = dict (globals(), ** locals()) '. Nota l'aggiunta di' ** locals'. Mi stavo chiedendo questa domanda da solo, e il tuo commento è stato la risposta migliore che ho trovato: -) –

risposta

5

Con IPython v1.0, si può semplicemente utilizzare

from IPython import embed 
embed() 

con più opzioni indicate nella docs.

+0

È possibile utilizzare questo ovunque e mantiene l'ambito. –

-1

Si può chiamare lo stesso Python:

import subprocess 

print "Hola" 

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

print "Adios" 
8

Il modulo code vi permetterà di avviare una Python REPL.

5

Non esattamente quello che vuoi ma python -i avvierà il prompt interattivo dopo l'esecuzione dello script.

-i: ispezionare in modo interattivo dopo l'esecuzione di script, (anche PYTHONINSPECT = x) e di forza richieste, anche se stdin non sembra essere un terminale

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

utilizzare il flag -i quando si avviare Python e impostare un gestore di atexit da eseguire durante la pulizia.

File script.py:

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

e poi si può lanciare Python con il flag -i:

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

Goodbye 
6

di approfondire la risposta di IVA: embedding-a-shell, incoporating code e 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() 
Problemi correlati