我正在努力获取包含管道的Windows命令的输出.以下是命令:

systeminfo | 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中复制/粘贴命令,它将返回结果.不知道为什么我不能在我的围棋计划中体现出来.我try 了几种变体,包括在第一个命令中添加"cmd"、"/C",但也没有成功.

推荐答案

删除io.Copy to no重定向到标准输出并打印缓冲区的内容.

    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())

即:

PS C:\Users\user\Documents> go run .\main.go
>>OS Name:                   Microsoft Windows 10 Pro

Go相关问答推荐

消费者在NAT中是如何实现的

调用API时使用nginx作为反向代理时从nginx获取502坏网关

GoLang:无法发送带有附件的邮箱

你能把用户界面文件中的GTK4应用程序窗口添加到GTK4应用程序中吗?

为什么(编码器).EncodeElement忽略";,innerxml";标记?

从MySQL/GO表获取行数据

Go 1.20 中如何计算连接错误?

nixOS 上的 Nginx 反向代理在try 加载 css/js 时返回 404

使用 goroutine 比较 Golang 中的两棵树是等价的

无法将 graphql-ws 连接到 gqlgen

Golang 中的泛型类型转换

如何在模板中传递和访问 struct 片段和 struct

regex.ReplaceAll 但如果替换则添加相同数量的字符

如何确定作为函数参数传递的指针是否正在被修改或副本是否正在被修改?

枚举的 Golang 验证器自定义验证规则

Go cmp - 如何为以 struct 为键的映射定义自定义相等性?

Golang 工作池实现意外工作

如何在测试中使用自定义标志(使用`testify/suite`)

在 golang 中联合一个接口和类型

空接口与泛型接口有何不同?