Rei*_*ica 3 ruby stdout popen stderr
在Ruby的popen/spawn中,如何将STDOUT和STDERR合并为单个流而不使用>2&1?
在Python中,这将是:
>>> import subprocess
>>> subprocess.check_output('my_prog args', stderr=subprocess.STDOUT, shell=True)
Run Code Online (Sandbox Code Playgroud)
注意这个stderr论点.
我使用Open3 - 因为我不想只是 stdout - 但它已经将它们分成两个流.
使用其他问题的代码,您可以:
cmd = 'a_prog --arg ... --arg2 ...'
Open3.popen2({"MYVAR" => "a_value"}, "#{cmd}", {:err => [:child, :out]}) { |i,o|
# This output should include stderr as well
output = o.read()
repr = "$ #{cmd}\n#{output}"
}
Run Code Online (Sandbox Code Playgroud)
一对夫妇改变:
popen2将stderr重定向到stdoutl 的第三个参数.请注意,它需要是生成进程的stdout,而不是系统范围的stdout,所以你需要指定:child's:out.popen2而不是.popen3看起来忽略重定向e.popen2,你只能传递|i,o|到块: