我有这样的服务器模式:
sleep 5
puts 'Server started'
loop { }
当我在irb:中运行它时
arr=Open3.popen3('uby-server.rb')arr[1]。获取
获取块,即使我知道它应该返回"服务器启动",但它没有。当我中断它并再次调用arr[1].gets
时,它会立即返回"Server started"。
如何使其在第一个arr[1].gets
上返回输出?
PS。当我从服务器上删除loop { }
时,它工作得很好。
您必须刷新输出缓冲区:
puts 'Server started'
$stdout.flush
或者启用同步模式:
$stdout.sync = true
puts 'Server started' # flushed automatically