假设我想在围棋程序中运行‘ls’,并将结果存储在字符串中.exec和os包中似乎有一些用于派生进程的命令,但它们需要stdout等的文件参数.有没有办法以字符串形式获得输出?

推荐答案

Edit:这个答案已经过时了.请参见下面的Fatih Arslan's answer.


通过将Pipe指定为stdout(如果需要,还可以指定stderr)来使用exec.Run.它将返回cmd,在Stdout(和Stderr)字段中包含一个os.File.然后你可以用ioutil.ReadAll来阅读.

例子:

package main

import (
    "exec";
    "io/ioutil";
)

func main() {
    if cmd, e := exec.Run("/bin/ls", nil, nil, exec.DevNull, exec.Pipe, exec.MergeWithStdout); e == nil {
        b, _ := ioutil.ReadAll(cmd.Stdout)
        println("output: " + string(b))
    }
}

Go相关问答推荐

Go 1.22 http mux:在同一路径上提供一个手柄和一个FS

gorm插入不支持的数据

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

为什么在GO中打印变量会导致堆栈溢出?

如何存储来自异步Goroutine的返回值列表?

GO错误:Tim.Time未实现driver.Valuer(缺少方法值)

在GO中使用泛型类型 struct 实现接口方法

go grpc:无法导入github.com/golang/protobuf/proto(没有所需的模块提供包github.com/gorang/protobuf-proto)

Golang Gorm Fiber - 如何将定义为别名的名称发送到索引模板?

为什么 net/http 不遵守超过 30 秒的超时持续时间?

使用 Go Colly 抓取所有可能的标签并将它们放入一个变量中

Golang 中的泛型类型转换

使用图像解码 JPEG 时 colored颜色 不正确.解码并写入 PDF?

不能使用 mockDB(*MockDB 类型的变量)作为 struct 文字中的 *gorm.DB 值

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

Golang 构建多平台问题

go:embed 文件扩展名模式

Golang prometheus 显示自定义指标

即使一个测试用例失败,如何运行所有测试用例

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF