如何从ipython shell捕获错误输出?
我正在写一个ipython宏,它处理程序的输出。问题是,程序有时可以写入如何从ipython shell捕获错误输出?,python,ipython,Python,Ipython,我正在写一个ipython宏,它处理程序的输出。问题是,程序有时可以写入stderr,因此如果我这样做: out = !my_program out变量将不包含输出。我认为它将包含退出代码(如果我错了,请纠正我) 如何捕获stdout和stderr流?foo2>&1意味着将所有输出(包括句柄2(即stderr))从foo命令重定向到句柄1(即stdout) 所以这里是=!foo 2>&1也许足够好了。下面是演示: egg.py: #!/usr/bin/env python # -*- cod
stderr
,因此如果我这样做:
out = !my_program
out
变量将不包含输出。我认为它将包含退出代码(如果我错了,请纠正我)
如何捕获stdout和stderr流?foo2>&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
In[5]:out=!蛋
回溯(最近一次呼叫最后一次):
文件“D:\python\note\egg.py”,第7行,在
main()
文件“D:\python\note\egg.py”,第5行,主目录
打印3/0
ZeroDivisionError:整数除法或模零除法
In[6]:out
Out[6]:SList(.p、.n、.l、.s、.grep()、.fields()、sort()可用):
0:你好
In[7]:out=!egg.py 2>&1
In[8]:out
Out[8]:SList(.p、.n、.l、.s、.grep()、.fields()、sort()可用):
0:你好
1:回溯(最近一次呼叫最后一次):
2:文件“D:\python\note\egg.py”,第7行,在
3:main()
4:文件“D:\python\note\egg.py”,第5行,在main中
5:打印3/0
6:ZeroDivision错误:整数除或零模
希望这有助于foo2>&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
In[5]:out=!蛋
回溯(最近一次呼叫最后一次):
文件“D:\python\note\egg.py”,第7行,在
main()
文件“D:\python\note\egg.py”,第5行,主目录
打印3/0
ZeroDivisionError:整数除法或模零除法
In[6]:out
Out[6]:SList(.p、.n、.l、.s、.grep()、.fields()、sort()可用):
0:你好
In[7]:out=!egg.py 2>&1
In[8]:out
Out[8]:SList(.p、.n、.l、.s、.grep()、.fields()、sort()可用):
0:你好
1:回溯(最近一次呼叫最后一次):
2:文件“D:\python\note\egg.py”,第7行,在
3:main()
4:文件“D:\python\note\egg.py”,第5行,在main中
5:打印3/0
6:ZeroDivision错误:整数除或零模
希望这能有所帮助孙强:早在微软在他们的系统中添加对它的支持之前,UNIX就有了这种重定向(例如,将stderr复制到stdout)。在UNIX下,它是通用的(如果你知道其他文件描述符的编号,你可以重定向、复制和关闭它们)。@Jim Dennis,谢谢你提供的信息。我只是一个Linux新手。我以前不知道这个。我已经对答案进行了相应的编辑。您是否知道是否可以捕获宏的输出?@Geo,对不起,我不知道宏。孙强:早在MS在他们的系统中添加了对它的支持之前,UNIX就已经有了这种重定向(
2>&1
,例如,将stderr复制到stdout)。在UNIX下,它是通用的(如果你知道其他文件描述符的编号,你可以重定向、复制和关闭它们)。@Jim Dennis,谢谢你提供的信息。我只是一个Linux新手。我以前不知道这个。我已经对答案进行了相应的编辑。您是否知道是否可以捕获宏的输出?@Geo,对不起,我不知道宏。