【问题标题】:Golang get command tty outputGolang 获取命令 tty 输出
【发布时间】:2019-09-20 17:24:17
【问题描述】:

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

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

然后我创建了自己的 Writer 类型,它就是这样做的,将两者写入缓冲区并打印到终端。

这就是问题所在——一些应用程序在检测到它没有写入 tty 时,会将其输出更改为人类可读性较差的内容。因此,当我以后一种方式进行操作时,我得到的输出会变成丑陋的东西。 (电脑更干净,人类更丑)

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

提前致谢!

【问题讨论】:

    标签: go exec tty


    【解决方案1】:

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

    你可以从this query开始。

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

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

    (顺便说一句,编写自定义“多写入器”没有意义,因为存在io.MultiWriter)。

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多