所以我有以下代码:
读者.rb
require 'open4'
def streamer(stdout)
begin
loop do
data = stdout.read_nonblock(8)
print data
end
rescue Errno::EAGAIN
retry
rescue EOFError
puts 'End of file'
end
end
pid, stdin, stdout, stderr = Open4::popen4 "ruby threader.rb"
stdout.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
streamer(stdout)
线程器.rb
10.times do
$stdout.puts "test"
sleep 1
end
一个 ruby 脚本是一个简单的微调器,它每秒都会输出到标准输出。
另一个用于运行该脚本,我想在数据进入时捕获它。所以我希望流从标准输出非阻塞读取。
我似乎无法让它发挥作用。我想我O_NONBLOCK
正确设置了 fctnl 标志,但也许我没有。