1

我有这样的服务器架构:

sleep 5
puts 'Server started'
loop { }

当我在 irb 中运行它时:

arr = Open3.popen3('ruby server.rb') arr[1].gets

获取块,甚至我知道它应该返回“服务器已启动”,但它没有。当我中断它并arr[1].gets再次调用时,它会立即返回“服务器启动”。

如何让它首先返回输出arr[1].gets

PS。当我loop { }从服务器中删除它时,它工作得很好。

4

1 回答 1

1

您必须刷新输出缓冲区:

puts 'Server started'
$stdout.flush

或启用同步模式:

$stdout.sync = true
puts 'Server started'  # flushed automatically
于 2013-06-24T09:46:31.060 回答