在 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,达到了预期的效果。