如何通过STDIN将数据提供给ruby中的多个外部命令

时间:2011-01-14 10:42:13

标签: ruby unix process stdin

这个问题有点像我以前的(已回答)问题:

How to run multiple external commands in the background in ruby

但是,在这种情况下,我正在寻找一种方法来将STDIN上的ruby字符串提供给外部进程,就像这样(下面的代码无效,但说明了我的目标):

#!/usr/bin/ruby

str1 = 'In reality a relatively large string.....'
str2 = 'Another large string'
str3 = 'etc..'

spawn 'some_command.sh', :stdin => str1
spawn 'some_command.sh', :stdin => str2
spawn 'some_command.sh', :stdin => str3

Process.waitall

2 个答案:

答案 0 :(得分:0)

这似乎有效:

data = [str1, str2, str3]

data.each do |input|
  fork do
    IO.popen(COMMAND, 'r+'){|n| n.print input}
  end
end

Process.waitall

答案 1 :(得分:0)

我想将一个应用的输出拆分为另外两个应用,但无法使tee工作。我使用了这个红宝石脚本。

alpha = IO.popen( "some shell command" , 'r+' ) 
bravo = IO.popen( "other command" , 'r+' ) 

ARGF.each_line do |line| 
  alpha << line
  bravo << line 
end