Come posso catturare l'output di errore dal guscio ipython?
Domanda
Sto scrivendo una macro ipython che elabora l'output di un programma. Il fatto è che il programma a volte può scrivere a stderr
, quindi se faccio qualcosa di simile:
out = !my_program
la variabile out
non conterrà l'output. Penso che conterrà il codice di uscita (correggetemi se sbaglio).
Come faccio a catturare sia i flussi stdout e stderr?
Soluzione
foo 2> & 1 mezzi reindirizzare tutto l'output, compreso la maniglia 2 (cioè STDERR), dal comando foo alla maniglia 1 (cioè, STDOUT)
ecco out =! foo 2> & 1 forse abbastanza buono. sotto è la 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
Spero che questo aiuti
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow