ツール ala のようなコマンドを実行するために使用したい popen3 を使用すると、予期しない動作が発生します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"