Учах руби попън и се интересувам от проста програма:
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 реда.
Dad say: Get a job!
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