将 stderr 从 python 的 exec-ed 进程重定向到 stdout?

发布于 2024-08-22 05:55:39 字数 320 浏览 9 评论 0原文

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

exec 2>&1
exec someprog

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

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

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

In a bash script, I can write:

exec 2>&1
exec someprog

And the stderr output of someprog would be redirected to stdout.

Is there any way to do a similar thing using python's os.exec* functions?

This doesn't have to be portable, just work on Linux.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

述情 2024-08-29 05:55:39

os.dup2(1, 2)

说明性示例

让我们使用虚假参数执行 /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。

在第3次和第4次调用中,Python程序将文件描述符1复制为文件描述符2,达到了预期的效果。

os.dup2(1, 2)

Illuminating examples

Let's execute /bin/ls with a bogus argument so that it complains to 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
$ 

First two invocations prove that ls does not write to stdout, and writes the error message to stderr.

In the 3rd and the 4th invocation, the Python program duplicates file descriptor 1 as file descriptor 2, achieving the desired effect.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文