Ruby в Linux PTY отключается без EOF, вызывает Errno ::EIO

Я пишу код, который берет файл, передает этот файл одному из нескольких двоичных файлов для обработки и отслеживает процесс преобразования на наличие ошибок. Я написал и протестировал следующую процедуру на OSX, но Linux не работает по причинам, которые мне не ясны.

#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
}

Выполняемая команда сильно различается, а код с отметкой ##был упрощен до локального эха в попытке отладить проблему. Команда выполняется, и сценарий выводит ожидаемый вывод в терминал, а затем выдает исключение.

Ошибка, которую он выдает в системах Debian::Errno::EIO (Input/output error - /dev/pts/0):

Все командные строки, которые я могу придумать, вызывают эту ошибку, и когда я запускаю код без локального блока эха, он работает нормально:

PTY.spawn(command) {|r,w,pid|}

В любом случае сама команда выполняется нормально, но похоже, что debian linux не отправляет eof на pty. Страницы документации для PTY и IO on ruby ​​-doc, похоже, здесь не помогут.

Есть предложения?Спасибо.

-вокс-

14
задан voxobscuro 20 April 2012 в 15:33
поделиться