我的问题:我想使用内置的exec包从golang代码中调用命令。对于许多外部程序,这工作得很好。但是有了 ,它似乎不太好。它总是只是返回go buildgo buildexit status 2编辑#1:在普通命令行窗口或powershell窗口中运行命令时,一切都按预期工作。到目前为止,我尝试了什么:设置和工作目录cmd.Pathcmd.Dir而不是运行它,我编译了它,并将二进制文件放在正确的工作目录中go run将两者都重定向到字节缓冲区,结果显示为空cmd.Stdoutcmd.Stderr尝试使用绝对路径而不是相对路径代码:parts := strings.Split(fmt.Sprintf(`go build -o %s -a -v -work -x -ldflags "-s -w" %s`, artifact, bd.CloneDir), " ")cmd := exec.Command(parts[0], parts[1:]...)messageCh <- fmt.Sprintf("build command to be executed: '%s'", cmd.String())result, err := cmd.CombinedOutput()if err != nil { messageCh <- fmt.Sprintf("build step '%s': failed because %s", buildStep, err.Error()) return "", err}messageCh <- fmt.Sprintf("build step '%s': successful with content:\n%s", buildStep, string(result))输出:build command to be executed: 'C:\Go\bin\go.exe build -o data/2/1619456424/artifact/github-public-golang-test-repo -ldflags "-s -w" data/2/1619456424/clone/main.go'build step 'build': failed because exit status 2我希望你对我有一些线索。提前致谢!
1 回答
MM们
TA贡献1886条经验 获得超2个赞
问题就在这里:
ldflags "-s -w"
拆分时,这将产生三个 arg,而不是两个,即 、 和 。ldflags"-s-w"
逐个构建数组元素,而不是拆分。对于 ldflags,请使用:
args:=[]string { "go",
...
"ldflags",
"-s -w",
...
}
- 1 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消