Ruby Open3.popen3模拟用户输入

时间:2013-06-14 21:51:54

标签: ruby bash sinatra popen3

我正在尝试运行需要用户输入的bash脚本(@command),并且我尝试使用以下代码提供该脚本输入:

Open3.popen3(@command) do |stdin, stdout, stderr|
  stdin.write("y")
  stdout.gets
end

以下是剧本的概念:

exec sudo su -c "some command" $username

如果有人可以告诉我我做错了什么或者对如何以不同方式实施这一点有任何建议,那将非常感激。

另外,我可以像这样运行脚本:

@output = `#{@command}`

在这种情况下,我可以在控制台中看到脚本输出的内容,我正在运行我的应用程序。如果无论如何都要将输入提供给那个也可以工作的位置。

2 个答案:

答案 0 :(得分:0)

我的解决方案在这里: How to fix hanging popen3 in Ruby?

Open3.popen3(@command) do |stdin, stdout, stderr|
  stdin.puts "y\r\n"

  stdout.each_line { |line| puts line }
  stdin.close
end

答案 1 :(得分:0)

out_err, status = Open3.capture2e(@command, :stdin_data => "y\r\n")
print out_err