【问题标题】:Redirect stderr to stdout on exec-ed process from python?将stderr重定向到python执行进程上的stdout?
【发布时间】:2010-02-22 09:25:01
【问题描述】:

在 bash 脚本中,我可以这样写:

exec 2>&1
exec someprog

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

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

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

【问题讨论】:

    标签: python linux redirect file-descriptor


    【解决方案1】:

    os.dup2(1, 2)

    举例说明

    让我们用一个虚假的参数执行/bin/ls,以便它向标准错误报告。

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

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多