Ruby Open3.popen3 имитирует пользовательский ввод
Я пытаюсь запустить скрипт bash (@command
), который требует пользовательского ввода, и я пытаюсь передать этот сценарий с помощью следующего кода:
Open3.popen3 (@command) do | stdin, stdout, stderr | stdin.write ("у") stdout.gets конец
Вот идея сценария:
exec sudo su -c "некоторая команда" $username
Если кто-то может сказать мне, что я делаю неправильно, или есть какие-либо предложения о том, как реализовать это по-другому, я был бы очень признателен.
Также я могу запустить скрипт так:
@output = `# {@ command}`
В этом случае я вижу содержимое вывода скрипта в консоли, с которой запускаю мое приложение. Если есть какой-либо способ подачи входных данных в это место, это тоже будет работать.
2 ответа
Решение
Получил мое решение здесь: Как исправить зависание popen3 в Ruby?
Open3.popen3 (@command) do | stdin, stdout, stderr | stdin.puts "y \ r \ n" stdout.each_line {| line | ставит строку} stdin.close конец
out_err, status = Open3.capture2e(@command, :stdin_data => "y\r\n")
print out_err