在 bash 脚本中,我可以编写:
exec 2>&1
exec someprog
并且 stderr 的输出someprog
将被重定向到 stdout。
有没有办法使用 python 的os.exec*
函数做类似的事情?
这不必是可移植的,只需在 Linux 上工作即可。
在 bash 脚本中,我可以编写:
exec 2>&1
exec someprog
并且 stderr 的输出someprog
将被重定向到 stdout。
有没有办法使用 python 的os.exec*
函数做类似的事情?
这不必是可移植的,只需在 Linux 上工作即可。
让我们/bin/ls
用一个虚假的参数执行,以便它向 stderr 抱怨。
$ python -c "import os; os.execl('/bin/ls', '', 'ffweew')" 1>/dev/null : ffweew: 没有这样的文件或目录 $ 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: 没有这样的文件或目录 $
前两次调用证明ls
不写入stdout,并将错误消息写入stderr。
在第 3 次和第 4 次调用中,Python 程序将文件描述符 1 复制为文件描述符 2,达到了预期的效果。