【发布时间】:2012-05-02 07:01:41
【问题描述】:
所以我有以下代码:
reader.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)
threader.rb
10.times do
$stdout.puts "test"
sleep 1
end
一个 ruby 脚本是一个简单的微调器,每秒都会输出到标准输出。
另一个用于运行该脚本,我想捕获传入的数据。所以我希望流从标准输出非阻塞读取。
我似乎无法让它工作。我想我正确设置了 fctnl O_NONBLOCK 标志,但也许我没有。
【问题讨论】:
-
请直接在此处发布代码而不是链接到它,如果将来不再存在链接,它可以防止问题变得无用。
标签: ruby