输出到$ stdout作为TTY并同时捕获输出

时间:2018-06-08 15:24:42

标签: ruby stdout child-process tty

我正在尝试将子进程的输出重定向到$stdout并同时捕获它。

如果我首先捕获输出然后将其重定向到$stdout,则所有ANSI颜色代码都会丢失,因为用于捕获的管道不是TTY。

有没有办法让子进程认为它输出到TTY?我尝试使用Open3.popen3StringIO子类为true返回#tty?,但我收到此错误,因为重定向目标必须是文件,而不是对象:

spawn': wrong exec redirect action (ArgumentError)

1 个答案:

答案 0 :(得分:1)

PTY模块可用于此目的。

不要使用IO.pipe创建管道,而只需使用PTY.open,这会创建一个可以像管道一样使用的伪终端。

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