ファイルを受け取り、そのファイルをいくつかのバイナリの1つに渡して処理し、エラーの変換プロセスを監視するコードを書いています。私はOSX上で次のルーチンを書いてテストしましたが、Linuxは私が明確ではない理由で失敗します。Ruby on Linux PTYはEOFなしで消えますErrno :: EIO
#run the command, capture the output so it doesn't display
PTY.spawn(command) {|r,w,pid|
until r.eof? do
##mark
puts r.readline
end
}
実行されるコマンドはかなり異なります。##マークのコードは、問題をデバッグするためにローカルエコーに簡素化されています。コマンドが実行され、スクリプトは端末で予想される出力を出力し、その後例外をスローします。 Errno::EIO (Input/output error - /dev/pts/0):
が
コマンド文字列のすべての私はそのエラーを生成を考え出すことができる、と私はローカルエコーブロックせずにコードを実行すると、それだけで正常に動作します:
それはDebianシステムで生成エラーです
PTY.spawn(command) {|r,w,pid|}
どちらの場合でも、コマンド自体は正常に実行されますが、debian linuxがptyをeofに送信していないようです。 ruby-doc上のPTYとIOのドキュメントページは、ここでは援助していないようです。
提案がありますか?ありがとう。
-vox-
これはまあまあですが、Debianのrubyバージョンに正しく読み込まれたreadlinesですか?それが問題で、rvmを使用している場合は、問題のノートを参考にしてください:[http://beginrescueend.com/packages/readline/](http://beginrescueend.com/packages/readline/) – forforf
Thats良い考え。私はこれらのサーバーでrvmを使用していませんが、ソース(および別のサーバー1.9.2)からruby1.9.3をコンパイルしました。私はreadlineのlibを変更することでそれを並べ替えるかもしれないと考えていませんでした。提案していただきありがとうございます。 – voxobscuro
libreadlineは、コマンドラインの編集、履歴など(irbなど)に関連しています。 IO#readlineメソッドには影響しません。 libreadlineをサポートせずにRubyをコンパイルすると、IOは期待どおりに動作します(irbは使用するのが面倒です)。 –