3

在 bash 脚本中,我可以编写:

exec 2>&1
exec someprog

并且 stderr 的输出someprog将被重定向到 stdout。

有没有办法使用 python 的os.exec*函数做类似的事情?

这不必是可移植的,只需在 Linux 上工作即可。

4

1 回答 1

5

os.dup2(1, 2)

有启发性的例子

让我们/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,达到了预期的效果。

于 2010-02-22T09:30:08.583 回答