Я получаю неожиданное поведение, используя popen3, который я хочу использовать для запуска команды, такой как инструмент ala cmd < file1 > file2
. Пример ниже висит, так что stdout done
никогда не будет достигнуто. Использование других инструментов, кроме cat
, может привести к зависанию, так что stdin done
никогда не будет достигнуто. Я подозреваю, что я страдаю от буферизации, но как мне это исправить?
#!/usr/bin/env ruby
require 'open3'
Open3.popen3("cat") do |stdin, stdout, stderr, wait_thr|
stdin.puts "foobar"
puts "stdin done"
stdout.each_line { |line| puts line }
puts "stdout done"
puts wait_thr.value
end
puts "all done"