gpt4 book ai didi

go - 使用 exec.Cmd.Run() 运行命令时如何获取所有输出行?

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:06 25 4
gpt4 key购买 nike

我正在使用 glide管理对我的项目的依赖。我创建了一个脚本,为我运行 go test $(glide novendor)(测试所有目录,不包括 vendor/ 目录)。虽然它有效,但运行命令的输出不会超出第一行:

ok my/project/scripts 0.005s

这是运行它的脚本部分:

// Get the paths to test (excluding the "vendor/" directory)
cmd := exec.Command("glide", "novendor")
var out bytes.Buffer
cmd.Stdout = &out
err = cmd.Run()
if err != nil {
log.Fatal("Could not run `glide novendor`: ", err)
}
glidenovendor := []string{"test"}
// Represents the "test ./src/... ./scripts/..." portion of the command
glidenovendor = append(glidenovendor, strings.Split(out.String(), " ")...)

// Run `go test ./src/... ./scripts/...`
cmd = exec.Command("go", glidenovendor...)
cmd.Stdout = os.Stdout
err = cmd.Run()
if err != nil {
log.Fatal("Could not run `go test` command with args: ", cmd, err)
}

直接在我的 shell 上运行命令会按预期输出所有行。

如何让我的脚本打印整个输出?

最佳答案

原来那条线

glidenovendor = append(glidenovendor, strings.Split(out.String(), "")...)

出于某种原因,向 glidenovendor slice 的最后一个字符串元素添加了换行符 "\n"。我仍然不知道为什么。但是使用下面的片段 删除它后,脚本会按预期运行:

// Remove trailing LF from strings in `glidenovendor`
for i, v := range glidenovendor {
glidenovendor[i] = strings.Trim(v, "\n")
}

关于go - 使用 exec.Cmd.Run() 运行命令时如何获取所有输出行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com