/ O rubínovom popene - rubíne, popene

O rubínovom popene - rubíne, popene

Učím sa ruby ​​popen a zaujímam sa o jednoduchý program:

pipe = IO.popen("-","w+")
if pipe
pipe.puts "Get a job!"
STDERR.puts "Child says: #{pipe.gets.chomp}"
else
STDERR.puts "Dad says: #{gets.chomp}"
puts "OK"
end

Potom vyzerá takto:

Dad says: Get a job!
Child says: OK

Ale keď aktualizujem kód odstránením STDOUT:

pipe = IO.popen("-","w+")
if pipe
pipe.puts "Get a job!"
puts "Child says: #{pipe.gets.chomp}"
else
puts "Dad says: #{gets.chomp}"
puts "OK"
end

Potom vykonajte nasledujúce zmeny:

Child says: Dad says: Get a job!

Chýba to "OK"! Tak prečo?

odpovede:

2 pre odpoveď č. 1

bez STDERR., puts napíšte výstup na stdout. Stdout v detskom procese je potrubie. Čokoľvek napísané do stdout nie je vytlačené, ale odoslané do potrubia.

Dieťa proces napísať 2 riadky.

  1. Dad say: Get a job!
  2. OK

Rodičovský proces čítal riadok (otec povedal: Získať úlohu!) A vytlačiť to.

Child says: Dad say: Get a job!
^^^^^^^^^^^^^^^^^^^ -- read from the pipe (stdout of child process).

Ak chcete tlačiť OK, zavolajte pipe.gets dvakrát alebo použite pipe.read načítať všetky výstupy detí:

pipe = IO.popen("-","w+")
if pipe
pipe.puts "Get a job!"
puts "Child says: #{pipe.read}"
else
puts "Dad says: #{gets.chomp}"
puts "OK"
end