Ruby - 在控制台上显示反引号输出

时间:2016-03-17 09:35:28

标签: ruby ansible ansible-playbook

在Ruby中,我使用反引号执行(许多)shell命令。如何在控制台上显示shell命令输出?

更详细一点。如果我运行如下所示的(ansible)命令,我会在控制台上获得 lot 滚动输出:

% ansible-playbook config.yml -e foo=bar -e baz=qux

PLAY [base setup] **************************************************************

TASK [setup] *******************************************************************
ok: [10.99.66.210]

... etc, etc

但是如果我从Ruby执行相同的命令(使用反引号),我在控制台上看不到任何输出:

# cmd = ansible-playbook config.yml -e foo=bar -e baz=qux
`#{cmd}`

哪个是不幸的,因为我想看看输出以便调试。我可以将Ruby脚本的输出重定向到(尾)日志文件,但是我希望在输出时看到输出。

1 个答案:

答案 0 :(得分:1)

感谢David K-J的评论,以及Ruby—Open3.popen3

我的解决方案是Open3#popen2e,例如:

# cmd = ansible-playbook config.yml -e foo=bar -e baz=qux
puts cmd
if execute then
  puts "Executing..."
  Dir.chdir("..") do
    Open3.popen2e(cmd) do |i,oe,t|
      oe.each { |line| puts line }
    end
  end
end