【发布时间】:2013-10-10 18:08:10
【问题描述】:
我正在编写一个 ruby 程序,它应该执行另一个程序,通过标准输入向它传递值,从标准输出读取响应,然后打印响应。这是我目前所拥有的。
#!/usr/bin/env ruby
require 'open3'
stdin, stdout, stderr = Open3.popen3('./MyProgram')
stdin.puts "hello world!"
output = stdout.read
errors = stderr.read
stdin.close
stdout.close
stderr.close
puts "Output:"
puts "-------"
puts output
puts "\nErrors:"
puts "-------"
puts errors
我在这里肯定做错了 - 当我运行它时,它似乎在等待我输入文本。我不想收到任何提示 - 我想启动 ./MyProgram,传入 "hello world!",取回响应,然后在屏幕上打印响应。我该怎么做?
编辑
以防万一,MyProgram 基本上是一个程序,它会一直运行到 EOF,读取和打印内容。
【问题讨论】:
-
./MyProgram包含什么代码? -
你能做到
p Open3.popen3('./MyProgram')吗? -
问题通常是子程序想要完全读取它的 STDIN,然后再尝试处理它读取的内容并输出结果。这意味着您必须关闭您的 STDIN 句柄,该句柄将传递给孩子,然后孩子知道可以完成其处理。这类似于父代码在完成处理之前将文件读取到末尾。
标签: ruby