在 Popen 中合并 stdout 和 stderr
在 Ruby 的 popen/spawn 中,如何将 STDOUT 和 STDERR 合并为单个流,而不求助于使用 >2&1
?
在 Python 中,这将是:
>>> import subprocess
>>> subprocess.check_output('my_prog args', stderr=subprocess.STDOUT, shell=True)
注意 stderr
参数。
我使用 Open3 - 因为我不想要只是 stdout - 但它已经将它们分成两个流。
In Ruby's popen/spawn, how do I merge both STDOUT and STDERR as a single stream wihthout resorting to using >2&1
?
In Python, this would be:
>>> import subprocess
>>> subprocess.check_output('my_prog args', stderr=subprocess.STDOUT, shell=True)
Note the stderr
argument.
I use Open3 - as I don't want just stdout - but it already separates them into two streams.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用其他问题中的代码,您可以在此处go:
一些更改:
popen2
的第三个参数将 stderr 重定向到 stdoutl。请注意,它需要是衍生进程的标准输出,而不是系统范围的标准输出,因此您需要指定:child
的:out
.popen2
而不是.popen3
因为如果您为 stderr 包含第三个e
选项,则重定向似乎会被忽略,.popen2
,你只将|i,o|
传递给块:Using the code from your other question, here you go:
A couple changes:
popen2
will redirect stderr to stdoutl. Note that it needs to be the spawned process's stdout, not the system-wide stdout, so you need to specify:child
's:out
.popen2
instead of.popen3
as it seems the redirection is ignored if you include the 3rde
option for stderr.popen2
, you only pass|i,o|
to the block:有点晚了,但是看看
Open3.popen2e
- 文档。其行为与
popen3
完全相同,但将stderr
stdout
合并为块的第二个参数。所以你可以简单地做
A bit late, but take a look at
Open3.popen2e
- docs.This behaves exactly as
popen3
, but mergesstderr
stdout
as the second argument to the block.So you can simply do