1

プログラムの出力を処理する ipython マクロを書いています。問題は、プログラムが に書き込むことができる場合があるためstderr、次のようなことをすると:


out = !my_program

out変数には出力が含まれません。終了コードが含まれると思います(間違っている場合は修正してください)。

stdout ストリームと stderr ストリームの両方をキャプチャするにはどうすればよいですか?

4

1 に答える 1

4

foo 2>&1 は、ハンドル 2 (つまり、STDERR) を含むすべての出力を foo コマンドからハンドル 1 (つまり、STDOUT) にリダイレクトすることを意味する
ので、ここでは out = !foo 2>&1 で十分かもしれません。以下はデモです:
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

お役に立てれば

于 2009-08-17T22:43:24.297 に答える