在Ruby中与子进程通信

时间:2014-12-21 15:16:19

标签: ruby io subprocess

有没有人知道如何在Ruby中启动子进程并使用已启动子进程的stdin和stdout与它进行通信?如下所示:

IO.popen("subprocess", "r+") do |io|
  io.puts(question1)
  answer1 = io.gets
  question2 = follow_up_question(question1, answer1)
  io.puts(question2)
  answer2 = io.gets
  # etc
end

关键是我想做互动。我不想只是为已启动的程序发送所有输入,然后检索所有输出,但我想发送内容并随后收到答案。有什么办法吗?我尝试了IO.popen,Open3.popen2和其他大约10种方法,但是所有这些方法都希望你先发送子进程的所有输入,然后检索所有输出。我找不到互动的方法。

1 个答案:

答案 0 :(得分:0)

您编写的代码适用于cat程序:

IO.popen("cat", "r+") do |io|
  io.puts("abcdef\n")
  answer1 = io.gets
  puts answer1
  io.puts("#{answer1.chomp}ghijkl\n")
  answer2 = io.gets
  puts answer2
end

打印

abcdef
abcdefghijkl

也许您需要在io后填写puts