我正在使用go的exec Run命令获取命令输出,当命令'Stdout'字段设置为mergeRebaseBranchName
,并且错误发送到os.Stdout
时,效果很好。
我想将输出和错误输出显示到控制台,但是我也希望程序查看输出是什么。
然后我创建了自己的Writer类型,将其写入缓冲区并打印到终端。
这是问题所在-一些应用程序在检测到未写入tty时将其输出更改为人类无法读取的内容。因此,当我以后者的方式进行输出时,输出变得难看。 (计算机更清洁,人类更难看)
我想知道Go中是否有某种方法可以说服我正在运行的任何命令,即使我不是os.Stderr
,我还是tty。我知道可以使用os.Stdout/os.Stderr
bash命令,但是根据Darwin / Linux使用不同的标志,所以我试图避免这种情况。
谢谢!
答案 0 :(得分:3)
解决此问题的唯一实用方法是分配一个pseudo terminal (PTY),并使您的外部进程将其用于其输出:由于PTY仍然是终端,因此检查它是否已连接到实际终端的进程认为它是
您可以从this query开始。
github.com/creack/pty
可能是一个很好的起点。
下一步是让实现PTY的程序包实际分配它,并将PTY的“另一端”连接到您的自定义编写器。
(顺便说一句,由于存在io.MultiWriter
,编写自定义的“多作者”毫无意义)。