Как передать данные через STDIN на несколько внешних команд в ruby - PullRequest
0 голосов
/ 14 января 2011

Этот вопрос немного похож на мой предыдущий (отвеченный) вопрос:

Как запустить несколько внешних команд в фоновом режиме в ruby ​​

Но в этом случае я ищу способ передачи строк ruby ​​через STDIN во внешние процессы, что-то вроде этого (код ниже недействителен, но иллюстрирует мою цель):

#!/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 голосов
/ 01 ноября 2011

Я хотел разделить вывод одного приложения на два других и не смог заставить tee работать. Я прибег к этому рубиновому скрипту.

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

ARGF.each_line do |line| 
  alpha << line
  bravo << line 
end
0 голосов
/ 14 января 2011

Это похоже на работу:

data = [str1, str2, str3]

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

Process.waitall
...