2015-02-11 5 views
5

Ich habe einige Code wie folgt aus:Kann ich den ipython-Exit vom aufrufenden Code ausführen?

form IPython import embed 
for item in my_item_list: 
    embed() 

Wenn ich dann mit diesem Programm laufen

python my_example_program.py 

auf der ersten Iteration durch die Schleife I in eine ipython Schale gestellt bekommen und kann item und inspizieren Umgebung, wie ich es gerne würde.

Beim Beenden von ipython wird die Schleife fortgesetzt und dann kann ich die nächste item und die Umgebung wie erwartet überprüfen.

Gibt es eine Möglichkeit für mich, diesen Code innerhalb von ipython zu beenden (so dass ich zu einer Shell-Eingabeaufforderung zurückkehrt). in irgendeiner Weise kurz davor, eine andere Shell zu öffnen und den Prozess zu beenden?

Antwort

7

In IPython gibt es einen %kill_embedded Befehl.
Es bringt Sie nicht direkt zurück zur Shell-Eingabeaufforderung, aber es überspringt die anderen eingebetteten Instanzen.

from IPython import embed 

for item in range(5): 
    print 'embedding', item 
    embed() 

Und hier ist der Ausgang:

$ python my_example_program.py 
embedding 0 
Python 2.7.9 (default, Dec 13 2014, 22:30:33) 
Type "copyright", "credits" or "license" for more information. 

IPython 1.1.0 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: print item 
0 

In [2]: ^D 

embedding 1 
Python 2.7.9 (default, Dec 13 2014, 22:30:33) 
Type "copyright", "credits" or "license" for more information. 

IPython 1.1.0 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [2]: %kill_embedded 
Are you sure you want to kill this embedded instance (y/n)? [y/N] y 
This embedded IPython will not reactivate anymore once you exit. 

In [3]: print item 
1 

In [4]: 

embedding 2 
embedding 3 
embedding 4 
$ 

UPD (2016.06.03): Es scheint, dass die %kill_embedded Feature Art in IPython 4.0 gebrochen ist; Sie können %exit_raise verwenden, die eine Ausnahme auslöst und zur Shell zurückbringt.

+0

Das Überspringen der anderen Embed-Instanzen ist genau das, was ich wollte, danke. –

+0

@ MikeH-R Gern geschehen! –

+0

Was genau hast du in der letzten Eingabe gemacht, nur ein reguläres CTRL + D? Ich versuche, dieses Beispiel in IPython 4.0 zu reproduzieren, aber ich muss immer alle 'embed's in der Schleife durchlaufen. Sieht so aus als hätte% kill_embedded tatsächlich keine Wirkung. – bluenote10

Verwandte Themen