在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脚本的输出重定向到(尾)日志文件,但是我希望在输出时看到输出。
答案 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