Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从ipython shell捕获错误输出?_Python_Ipython - Fatal编程技术网

如何从ipython shell捕获错误输出?

如何从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

我正在写一个ipython宏,它处理程序的输出。问题是,程序有时可以写入
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,对不起,我不知道宏。