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ď č. 1bez 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.
Dad say: Get a job!
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