Linux上でrubyのPTYを使うと、Errno::EIOが出る
以下のコードはMac OS X上だと上手く動きますが、Linux上だと
Errno::EIO: Input/output error @ io_fillbuf
というエラーが起きます。
require 'pty'
PTY.spawn("ls") do |r,w,pid|
until r.eof? do
puts r.readline
end
end
どうやら、読み込んだ際にBSDだとnilになりますが、GNU/LinuxだとErrno::EIOが発生する仕様らしいです。
Ruby on Linux PTY goes away without EOF, raises Errno::EIO
にあるように、resqueするSafePtyを作ることで回避できます。