我使用 go 的 exec Run 命令來獲取命令輸出,當(dāng)命令“Stdout”字段設(shè)置為os.Stdout且錯(cuò)誤發(fā)送到os.Stderr.我想將輸出和錯(cuò)誤輸出顯示到控制臺,但我也希望我的程序看到輸出是什么。然后我創(chuàng)建了自己的 Writer 類型來完成此操作,將兩者寫入緩沖區(qū)并打印到終端。問題是,當(dāng)某些應(yīng)用程序檢測到它沒有寫入 tty 時(shí),會將其輸出更改為人類難以讀取的內(nèi)容。因此,當(dāng)我以后一種方式執(zhí)行此操作時(shí),我得到的輸出會變得丑陋。(對計(jì)算機(jī)來說更干凈,對人類來說更丑陋)我想知道 Go 中是否有某種方法可以讓我運(yùn)行的任何命令相信我是 tty,盡管不是 tty os.Stdout/os.Stderr。我知道可以使用scriptbash 命令來完成,但是根據(jù) Darwin/Linux 使用不同的標(biāo)志,所以我試圖避免這種情況。提前致謝!
1 回答

狐的傳說
TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
解決此問題的唯一實(shí)用方法是分配一個(gè)偽終端 (PTY)并使外部進(jìn)程將其用于其輸出:由于 PTY 仍然是一個(gè)終端,因此檢查它是否連接到真實(shí)終端的進(jìn)程認(rèn)為它是。
您可以從這個(gè)查詢開始。
這github.com/creack/pty
可能是一個(gè)很好的起點(diǎn)。
下一步是讓一個(gè)實(shí)現(xiàn) PTY 的包實(shí)際分配它,并將 PTY 的“另一端”連接到您的自定義編寫器。
(順便說一句,編寫自定義的“多編寫器”是沒有意義的io.MultiWriter
)。
- 1 回答
- 0 關(guān)注
- 301 瀏覽
添加回答
舉報(bào)
0/150
提交
取消