我有两个简单的脚本,读者和作者:
writer.rb
:
while true
puts "hello!"
$stdout.flush
sleep 1
end
reader.rb
:
while true
puts "I read: #{$stdin.read}!"
sleep 1
end
writer.rb
不断写入stdout,reader.rb
从stdin连续读取。
现在,如果我这样做:
ruby writer.rb | ruby reader.rb
我希望这能继续打印
I read: hello!
I read: hello!
I read: hello!
每隔一秒。但它只是阻止而不打印任何东西。如何打印?我认为writer.rb
正在缓存输出,所以我添加了$stdout.flush
,但这并没有让我在任何地方。
答案 0 :(得分:3)
您必须使用$stdin.gets
代替.read
,因为.read
读取到EOF。
puts "I read: #{$stdin.read}!"
应该是
puts "I read: #{$stdin.gets}!"
注意:这将包括换行符,因此输出将类似于:
I read: hello!
!
I read: hello!
!
I read: hello!
!
如果您不想使用尾随换行符,请使用$stdin.gets.chomp
使用$stdin.gets.chomp
输出:
I read: hello!!
I read: hello!!
答案 1 :(得分:2)