its*_*dok 3 python linux redirect file-descriptor
在 bash 脚本中,我可以编写:
exec 2>&1
exec someprog
Run Code Online (Sandbox Code Playgroud)
并且 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,达到了预期的效果。
| 归档时间: |
|
| 查看次数: |
1546 次 |
| 最近记录: |