Вывести в $ stdout как TTY и записать вывод одновременно - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь перенаправить вывод дочернего процесса на $stdout и захватить его одновременно.

Если я сначала перехватил вывод, а затем перенаправил его на $stdout все цвета ANSIкоды теряются, потому что канал, используемый для захвата, не является TTY.

Есть ли способ заставить дочерний процесс думать, что он выводит на TTY?Я попытался использовать Open3.popen3 и подкласс StringIO, который возвращает true для #tty?, но я получаю эту ошибку, потому что целью перенаправления должен быть файл, а не объект:

spawn': wrong exec redirect action (ArgumentError)

1 Ответ

0 голосов
/ 08 июня 2018

Для этой цели можно использовать модуль PTY.

Вместо создания канала с IO.pipe, просто используйте PTY.open, который создает псевдотерминал, который можно использовать как канал.

https://ruby -doc.org / stdlib-2.3.7 / libdoc / pty / rdoc / PTY.html

...