Golang获取命令tty输出

时间:2019-09-20 17:24:17

标签: go exec tty

我正在使用go的exec Run命令获取命令输出,当命令'Stdout'字段设置为mergeRebaseBranchName,并且错误发送到os.Stdout时,效果很好。

我想将输出和错误输出显示到控制台,但是我也希望程序查看输出是什么。

然后我创建了自己的Writer类型,将其写入缓冲区并打印到终端。

这是问题所在-一些应用程序在检测到未写入tty时将其输出更改为人类无法读取的内容。因此,当我以后者的方式进行输出时,输出变得难看。 (计算机更清洁,人类更难看)

我想知道Go中是否有某种方法可以说服我正在运行的任何命令,即使我不是os.Stderr,我还是tty。我知道可以使用os.Stdout/os.Stderr bash命令,但是根据Darwin / Linux使用不同的标志,所以我试图避免这种情况。

谢谢!

1 个答案:

答案 0 :(得分:3)

解决此问题的唯一实用方法是分配一个pseudo terminal (PTY),并使您的外部进程将其用于其输出:由于PTY仍然是终端,因此检查它是否已连接到实际终端的进程认为它是

您可以从this query开始。

github.com/creack/pty可能是一个很好的起点。

下一步是让实现PTY的程序包实际分配它,并将PTY的“另一端”连接到您的自定义编写器。

(顺便说一句,由于存在io.MultiWriter,编写自定义的“多作者”毫无意义)。