2010-04-09 14 views
15

Şunun gibi bir şey yapmak isterim:Bir senaryonun ortasında pythonun etkileşimli hale gelmesinin bir yolu var mı?

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

Python ile mümkün mü? Yoksa, aynı şeyi yapmanın başka bir yolunu görüyor musunuz?

+3

Herkese teşekkürler! ithalat kodu code.interact (yerel = globaller()) –

+2

yanı ad içine lokal değişkenler almak için, ' gerekir: Kayıt için, bunu başarmak için kod modülü kullanmak için en kolay yolu şudur code.interact (local = dict (globals(), ** locals()) '. ' ** locals'ın eklenmesini unutmayın. Bu soruyu kendim merak ediyordum ve yorumunuz bulduğum en iyi cevaptı:) –

cevap

5

, sadece docs gösterilen fazla seçenek

from IPython import embed 
embed() 

kullanabilirsiniz.

+0

Bunu her yerde kullanabilirsiniz ve kapsamı korur. –

-1

Python kendisini çağırabilir:

import subprocess 

print "Hola" 

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

print "Adios" 
8

code modülü Python Repl başlatmak için izin verecektir.

5

Tam olarak istediğiniz şey değil ama python -i komut dosyasını yürüttükten sonra etkileşimli soruyu başlatır.

-i: etkileşimli komut çalıştırdıktan sonra, (aynı zamanda PYTHONINSPECT = x) ve kuvvet istemleri, bile Stdin eklendiğinde -i bayrak, bir terminal

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

kullanımlar için görünmez inspect Python'u başlatın ve temizlik yaparken çalıştırmak için bir atexit işleyicisi ayarlayın.

Dosya script.py:

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

ve sonra sadece -i bayrağıyla Python başlatın:

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

Goodbye 
6

Iva cevabı üzerinde durmak için: embedding-a-shell, code ve ipython incoporating.

ipython ile v1.0
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()