检查stdout是否包含输出?

时间:2016-12-26 22:49:18

标签: ruby

我有一个client.rb程序,可打印几行文本,然后暂停用户输入。我试图使用PTY.spawn(或其他子进程库,如果此处没有此功能)来包装它。

使用stdout.readline我可以打印几行输出。问题是,一旦输出完成(并且它等待我的输入),stdout.readline就会挂起。

require 'pty'
PTY.spawn("ruby client.rb") do |stdout, stdin, thread|
  until (line=stdout.readline).empty?; puts line; end
end

我正在寻找stdout上的方法,如果那里没有任何内容,它将返回nil''。我想我可以使用rescueTimeout,但我希望有更好的方法。

我应该注意到,我使用其他方法来阅读stdouteach_lineeachread,{{1} }。在所有这些情况下,它挂起> 30秒然后加注:

readlines

引发此错误后,再次尝试从Errno::EIO Exception: Input/output error @ io_fillbuf 读取会导致出现相同的错误,但现在会立即发生错误。

我在各种教程(即this answer)中看到stdout可以获救。但是它不适合我。即使我命令Errno::EIO打印更多输出,尝试从client.rb读取也会在第一次提升时显示此错误。

0 个答案:

没有答案