2016-03-17 2 views
2

В Ruby Я использую backticks для выполнения (многих) команд оболочки. Как получить вывод команды оболочки, отображаемый на консоли?Ruby - отображать выходные результаты на консоли

Немного подробней. Если я запускаю (анзибль) команду, как в следующем, я получаю много прокрутки вывода на консоль:

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

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

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

... etc, etc 

Однако если выполнить ту же команду с Рубином (используя кавычку), я не вижу вывод на консоль:

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

Что прискорбно, так как я хотел бы видеть выход для того, чтобы отладить. Я мог бы перенаправить вывод из сценария Ruby в файл журнала (хвост), однако я хочу видеть результат как это происходит.

+1

Я не думаю, что вам нужно интерполировать' cmd' с '# {} ' – marcosbeirigo

+1

Вам нужно' puts \ '# {cmd} \' ', но я не уверен, что он покажет что-нибудь, пока оно не завершится. В противном случае используйте [popen3] (http://ruby-doc.org/stdlib-2.0.0/libdoc/open3/rdoc/Open3.html#method-c-popen3) –

ответ

1

Благодаря комментарий David K-J «s, а также 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 
Смежные вопросы