2009-08-17 4 views
0

J'écris une macro ipython qui traite la sortie d'un programme. La chose est, le programme peut parfois écrire à stderr, donc si je fais quelque chose comme ceci:Comment puis-je capturer la sortie d'erreur du shell ipython?


out = !my_program 

la variable out ne contiendra pas la sortie. Je pense qu'il contiendra le code de sortie (corrigez-moi si je me trompe).

Comment puis-je capturer les flux stdout et stderr?

Répondre

4

foo 2> & 1 moyens rediriger toute la production, y compris la poignée 2 (qui est, STDERR), à partir de la commande foo pour traiter 1 (qui est, STDOUT)
donc ici out =! Foo 2> & 1 peut-être assez bien. ci-dessous est la démonstration:
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 

Hope this helps

+1

sunqiang: UNIX a ce type de redirection (** '2> & 1' * * pour dupliquer stderr à stdout, par exemple) longtemps avant que MS ne prenne en charge le support dans ses systèmes. Sous UNIX, il est généralisé (vous pouvez rediriger, dupliquer et fermer d'autres descripteurs de fichiers si vous connaissez leur nombre). –

+0

@Jim Dennis, merci pour l'info. Je suis juste un débutant Linux. Je ne le sais pas avant. J'ai édité la réponse en conséquence. – sunqiang

+0

Merci! Cela aide. – Geo

Questions connexes