$stdout.gets块何时应该返回输出,原因是什么



我有这样的服务器模式:

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

最新更新