如何在Python中将exec-ed进程的stderr重定向到stdout?
在一个bash脚本中,我可以这样写:
exec 2>&1
exec someprog
这样,someprog
的错误输出就会被重定向到标准输出。
有没有办法用python的os.exec*
函数做类似的事情呢?
这个不需要跨平台,只要在Linux上能工作就行。
1 个回答
5
生动的例子
我们来执行一下 /bin/ls
命令,给它一个错误的参数,这样它就会把错误信息输出到标准错误(stderr)中。
$ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null : ffweew: No such file or directory $ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null $ python -c "import os; os.dup2(1, 2); os.execl('/bin/ls', '', 'ffweew')" 2>/dev/null : ffweew: No such file or directory $
前两次执行证明了 ls
命令并没有把信息写到标准输出(stdout),而是把错误信息写到了标准错误(stderr)中。
在第三次和第四次执行中,Python 程序将文件描述符1(标准输出)复制为文件描述符2(标准错误),这样就达到了我们想要的效果。