我有一个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
或''
。我想我可以使用rescue
和Timeout
,但我希望有更好的方法。
我应该注意到,我使用其他方法来阅读stdout
:each_line
,each
,read
,{{1} }。在所有这些情况下,它挂起> 30秒然后加注:
readlines
引发此错误后,再次尝试从Errno::EIO Exception: Input/output error @ io_fillbuf
读取会导致出现相同的错误,但现在会立即发生错误。
我在各种教程(即this answer)中看到stdout
可以获救。但是它不适合我。即使我命令Errno::EIO
打印更多输出,尝试从client.rb
读取也会在第一次提升时显示此错误。