Comment puis-je capturer la sortie d'erreur du shell ipython?
Question
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:
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?
La solution
foo 2> & 1 signifie rediriger toute la production, y compris la poignée 2 (qui est, STDERR), à partir de la commande foo pour traiter 1 (qui est, STDOUT)
alors voici out =! foo 2> & 1 peut-être assez bon. ci-dessous est la démo:
egg.py:
#!/usr/bin/env python
# -*- coding: utf8 -*-
def main():
print 'hello'
print 3/0
if __name__ == "__main__":
main()
0,10 IPython
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow