Ruby 捕获 bash 脚本执行的 stderr 输出

5

我目前可以通过在bash中运行命令并将结果设置为我的字符串变量,来将stdout重定向到ruby / rails中的字符串变量。

val = %x[ #{cmd} ]

其中cmd是表示bash命令的字符串。

然而,这只捕获了stdout,我想捕获stderr并将其设置为ruby中的一个字符串--有什么想法吗?

2个回答

12

只需简单地将其重定向:

val = %x[ #{cmd} 2>&1 ]

如果您想仅捕获stderr输出,请在将其复制到fd 2之后关闭stdout的文件描述符。

val = %x[ #{cmd} 2>&1 >/dev/null ]

1
只是早上一个我并没有认真思考过的问题。 :D - jab

2
您可以使用 Open3.popen3
require 'open3'
stdin, stdout, stderr, wait_thread = Open3.popen3('ping -Z')
# => [#<IO:fd 9>, #<IO:fd 10>, #<IO:fd 12>, #<Thread:0x007fd3d30a0ce0 sleep>]

stderr.gets # => "ping: illegal option -- Z\n"
stdout.gets # => nil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接