Ответ 1
Взгляните на стандартную библиотеку ruby open3. Это даст вам доступ к stdin, stdout и stderr.
Существует также внешний проект open4, который позволяет получить статус выхода без использования имени магической переменной.
IO.popen() и system() в Ruby не хватает нескольких полезных функций, таких как:
Python имеет модуль "подпроцесс", который я думал об использовании в качестве вдохновения для аналогичного модуля в Ruby. Теперь на вопросы:
Взгляните на стандартную библиотеку ruby open3. Это даст вам доступ к stdin, stdout и stderr.
Существует также внешний проект open4, который позволяет получить статус выхода без использования имени магической переменной.
Я чувствовал необходимость делать именно это при тестировании git_remote_branch. Инструмент вызывает оболочку, и я хотел точно отобразить то, что отображалось во время тестовых прогонов, независимо от того, что отображал git, и независимо от того, было ли оно выплющено в stdout или stderr.
У меня есть модуль, который отлично можно использовать повторно здесь (лицензия MIT: используйте по своему усмотрению, просто не судите меня; -)
Вы можете увидеть это в действии в тестах для git_remote_branch здесь.
Кроме того, я настроил репо специально для capture_fu, он включает в себя некоторые тесты и прочее. Проект не очень хорошо настроен. Я не потратил много времени на его освобождение; -)