我现在可以通过在bash中运行命令并将结果设置为我的字符串变量,将stdout
重定向到ruby / rails中的字符串变量,如下所示。
val = %x[ #{cmd} ]
其中cmd
是表示bash命令的字符串。
然而,这仅捕获stdout
,因为我想捕获stderr
并将其设置为ruby中的字符串 - 任何想法?
答案 0 :(得分:11)
只需重定向即可:
val = %x[ #{cmd} 2>&1 ]
如果只想从stderr捕获输出,请在将其复制到fd 2后关闭stdout的文件描述符。
val = %x[ #{cmd} 2>&1 >/dev/null ]
答案 1 :(得分:1)
您可以使用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