2009-08-17 2 views
0

Ich schreibe ein Ipython-Makro, das die Ausgabe eines Programms verarbeitet. Die Sache ist, kann das Programm manchmal stderr, schreiben so, wenn ich so etwas tun:Wie kann ich die Fehlerausgabe von der ipython-Shell erfassen?


out = !my_program 

die out Variable wird die Ausgabe nicht enthalten. Ich denke, es wird den Exit-Code enthalten (korrigiere mich, wenn ich falsch liege).

Wie kann ich sowohl stdout als auch stderr streams erfassen?

Antwort

4

foo 2> & 1 bedeutet die gesamte Ausgabe umleiten, einschließlich Griff 2 (das heißt, STDERR), aus dem foo Befehl 1 zu handhaben (das heißt, STDOUT)
so hier raus! = Foo 2> & 1 vielleicht gut genug. unten ist die Demo:
egg.py:

#!/usr/bin/env python 
# -*- coding: utf8 -*- 
def main(): 
    print 'hello' 
    print 3/0 
if __name__ == "__main__": 
    main() 

IPython 0,10

In [5]: out = !egg.py 
Traceback (most recent call last): 
    File "D:\python\note\egg.py", line 7, in <module> 
    main() 
    File "D:\python\note\egg.py", line 5, in main 
    print 3/0 
ZeroDivisionError: integer division or modulo by zero 

In [6]: out 
Out[6]: SList (.p, .n, .l, .s, .grep(), .fields(), sort() available): 
0: hello 

In [7]: out = !egg.py 2>&1 

In [8]: out 
Out[8]: SList (.p, .n, .l, .s, .grep(), .fields(), sort() available): 
0: hello 
1: Traceback (most recent call last): 
2: File "D:\python\note\egg.py", line 7, in <module> 
3:  main() 
4: File "D:\python\note\egg.py", line 5, in main 
5:  print 3/0 
6: ZeroDivisionError: integer division or modulo by zero 

hoffe, das hilft

+1

sunqiang: UNIX, diese Art der Umleitung hatte (** '2> & 1 '* * zu duplizieren stderr zu stdout, zum Beispiel) lange bevor MS Unterstützung dafür in ihren Systemen hinzufügte. Unter UNIX ist es verallgemeinert (Sie können andere Dateideskriptoren umleiten, duplizieren und schließen, wenn Sie ihre Nummern kennen). –

+0

@ Jim Dennis, danke für die Info. Ich bin nur ein Linux-Neuling. Ich weiß das vorher nicht. Ich habe die Antwort entsprechend bearbeitet. – sunqiang

+0

Danke! Es hilft. – Geo