猿问

Golang - 无法从 pipped Windows 命令中获取结果

我正在努力获取其中包含管道的 Windows 命令的输出。这是命令:


系统信息 | findstr /B /C:"操作系统名称"


这是代码:


c1 := exec.Command("systeminfo")

c2 := exec.Command("findstr", "/B", `/C:"OS Name"`)


r, w := io.Pipe()

c1.Stdout = w

c2.Stdin = r


var b2 bytes.Buffer

c2.Stdout = &b2


c1.Start()

c2.Start()

c1.Wait()

w.Close()

c2.Wait()

io.Copy(os.Stdout, &b2)

fmt.Println(b2)

输出: []


如果我在 cmd 中复制/粘贴命令,它将返回结果。不知道为什么我不能在我的 Go 程序中反映出来。我尝试了几种变体,包括在第一个命令中添加“cmd”、“/C”,但也没有成功。


拉莫斯之舞
浏览 83回答 1
1回答

慕丝7291255

删除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
随时随地看视频慕课网APP

相关分类

Go
我要回答