2015-05-05 8 views
5

speichern Ich bin ein Python und Ipython Anfänger. Dies kann eine triviale Frage sein. Es ist wahrscheinlich mit anderen Fragen dupliziert. Ich weiß jedoch nicht, welche Schlüsselwörter ich suchen sollte.wie ipython magische Ausgabe in Variable

Ich habe bereits gewusst, wie man mit Shell interagiert.

Zum Beispiel:

In [1]: a = !ls 
In [2]: a 
     ...same ls result as shell... 
In [3]: type(a) 
Out[3]: IPython.utils.text.SList 

jedoch, wie man interaktiv mit IPython Magie?

Zum Beispiel

In [1]: a = %history -t 
     ...Ipython result... 
In [2]: a 
In [3]: type(a) 
Out[3]: NoneType 
+0

? Geschichte gibt Ihnen, wo sie definiert ist. Importieren Sie IPython.core.magics.history.HistoryMagics, damit Sie es aufrufen können. xxx = IPython.core.magics.history.HistoryMagics() und xxx.history() geben einen Fehler aus. Dann blieb ich stecken. –

Antwort

1

Für die Geschichte Befehl, und zwar die einfachste Lösung ist

In [243]: history -t -f history.txt 
In [244]: with open('history.txt') as f: 
    .....:  HIST = [l.strip() for l in f] 
    .....:  

In [245]: len(HIST) 
Out[245]: 258 

In [246]: HIST[-1] 
Out[246]: "get_ipython().magic(u'history -t -f history.txt')" 

In [247]: 

Grundsätzlich Dump in eine Datei und lesen Sie es in zurück.

Diese kann ein Klud, scheinen, aber ich vermute, dass es von der Natur von IPython kommt. Es ist eigentlich kein Interpreter, sondern eine Kommandozeilen-Shell für den zugrunde liegenden Interpreter. Mein Verdacht ist, dass die magischen Befehle innerhalb von IPython behandelt werden und nicht den normalen Weg durchlaufen, den Befehl an den Interpreter zu übergeben, die Ausgabe zu erfassen und sie in der Befehlsgeschichte als Out [n] zu speichern. Es ist also nicht für den Rückruf und die Zuweisung verfügbar.

Die Alternative ist, dass get_ipython().magic einfach None zurückgibt.

In beiden Fällen ist der Bildschirmausgang d = für %history nicht verfügbar. Sie müssen es in eine Datei ablegen.

Es scheint per magischen Befehl variieren. alias, zum Beispiel, wird die Bildschirmausgabe Rückkehr

In [288]: a=%alias 
Total number of aliases: 17 

In [289]: a 
Out[289]: 
[('cat', 'cat'), 
('clear', 'clear'), 
('cp', 'cp'), 
('ldir', 'ls -F -G -l %l | grep /$'), 
('less', 'less'), 
('lf', 'ls -F -l -G %l | grep ^-'), 
('lk', 'ls -F -l -G %l | grep ^l'), 
('ll', 'ls -F -l -G'), 
('ls', 'ls -F -G'), 
('lx', 'ls -F -l -G %l | grep ^-..x'), 
('man', 'man'), 
('mkdir', 'mkdir'), 
('more', 'more'), 
('mv', 'mv'), 
('rm', 'rm'), 
('rmdir', 'rmdir'), 
(u'show', u'echo')] 

In [290]: 
+0

Nun, ich denke, dump magische Ergebnis in Datei kann eine Lösung sein (Ich kann den Code in benutzerdefinierte Modul für die Wiederverwendung schreiben.) Aber ich möchte wissen, ob es eine einfache Möglichkeit, dies nicht für bestimmte Magie ist? (Wenn nicht, warum bietet Ipython diese Lösung nicht an?) –

+0

'die magischen Befehle werden in IPython behandelt.' Ok, es scheint ein möglicher Grund zu sein. Übrigens glaube ich, dass diese Alias-Befehle nicht mit Ipython-Magie in Verbindung stehen, die "% alias selbst" ausschließt. (Diese basieren auf Shell-Befehlen, die nicht magisch sind) Wie auch immer, ich werde diese Frage für eine Weile stellen, ich danke immer noch für deine Erklärung. –

+0

Einverstanden, dass 'alias' sich auf Shell-Befehle bezieht. Aber es ist auch ein Beispiel für einen '% magic'-Befehl, der seine Ausgabe zurückgibt. Ich glaube nicht, dass Sie für alle eine einzige Lösung finden werden. – kdopen