我正在努力獲取其中包含管道的 Windows 命令的輸出。這是命令:系統信息 | findstr /B /C:"操作系統名稱"這是代碼:c1 := exec.Command("systeminfo")c2 := exec.Command("findstr", "/B", `/C:"OS Name"`)r, w := io.Pipe()c1.Stdout = wc2.Stdin = rvar b2 bytes.Bufferc2.Stdout = &b2c1.Start()c2.Start()c1.Wait()w.Close()c2.Wait()io.Copy(os.Stdout, &b2)fmt.Println(b2)輸出: []如果我在 cmd 中復制/粘貼命令,它將返回結果。不知道為什么我不能在我的 Go 程序中反映出來。我嘗試了幾種變體,包括在第一個命令中添加“cmd”、“/C”,但也沒有成功。
1 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
刪除io.Copy不重定向到 STDOUT 并打印緩沖區的內容。
systemCmd := exec.Command("systeminfo")
findCmd := exec.Command("findstr", "/B", "/C:OS Name")
reader, writer := io.Pipe()
buf := bytes.NewBuffer(nil)
systemCmd.Stdout = writer
findCmd.Stdin = reader
findCmd.Stdout = buf
systemCmd.Start()
findCmd.Start()
systemCmd.Wait()
writer.Close()
findCmd.Wait()
reader.Close()
fmt.Println(">>" + buf.String())
IE:
PS C:\Users\user\Documents> go run .\main.go
>>OS Name: Microsoft Windows 10 Pro
- 1 回答
- 0 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消