我在使用 popen3 时遇到了意外的行为,我想用它来运行类似 tool 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"