0
我在寫一個處理程序輸出的ipython宏。問題是,該程序有時會寫信給stderr
,所以如果我做這樣的事情:如何捕獲ipython shell的錯誤輸出?
out = !my_program
的out
變量將不包含輸出。我認爲它將包含退出代碼(糾正我,如果我錯了)。
如何捕獲stdout和stderr流?
我在寫一個處理程序輸出的ipython宏。問題是,該程序有時會寫信給stderr
,所以如果我做這樣的事情:如何捕獲ipython shell的錯誤輸出?
out = !my_program
的out
變量將不包含輸出。我認爲它將包含退出代碼(糾正我,如果我錯了)。
如何捕獲stdout和stderr流?
FOO 2> & 1裝置重定向的所有輸出,包括手柄2(即STDERR),從foo的命令來處理1(即,STDOUT)
所以這裏出來=!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
希望這有助於
sunqiang:UNIX過這樣的重定向(的**'2>&1' * *複製 stderr到標準輸出,例如)早在MS在其系統中增加了對它的支持之前。在UNIX下它是通用的(如果你知道它們的數字,你可以重定向,複製和關閉其他文件描述符)。 – 2009-08-18 00:15:38
@吉姆丹尼斯,感謝您的信息。我只是一個Linux新手。之前不知道這一點。我已經相應編輯了答案。 – sunqiang 2009-08-18 01:43:45
謝謝!它確實有幫助。 – Geo 2009-08-18 07:31:21