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

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