За рубин попън - руби, попън

Учах руби попън и се интересувам от проста програма:

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

След това произвежда изглежда така:

Dad says: Get a job!
Child says: OK

Но когато актуализирам кода, като премахна 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

След това направете промени в това:

Child says: Dad says: Get a job!

Липсва "ОК"! Така че, защо?

Отговори:

2 за отговор № 1

Без STDERR., puts напишете изхода на stdout. Stdout в детския процес е тръба. Всичко, което е написано на ството, не се отпечатва, а се изпраща на тръбата.

Детският процес пише 2 реда.

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

Процесът на родителите прочете линия (татко кажи: Получете работа!) И го отпечатайте.

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

Ако искате да печатате OK, обадете се pipe.gets два пъти или да се използва pipe.read да прочетете цялата продукция на децата:

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