Golang exec.Command 问题:总是失败,退出代码为 2
Golang exec.Command problem: always fails with exit code 2
我的问题:
我想使用内置的 exec 包从 golang 代码调用 go build
命令。对于许多外部程序,这工作得很好。但是对于 go build
,它似乎不太正确。
它总是 returns exit status 2
编辑 #1:当 运行 普通命令行 window 或 powershell window 中的命令时,一切正常。
到目前为止我尝试了什么:
- 设置
cmd.Path
和cmd.Dir
到工作目录
- 而不是 运行 它与
go run
,我编译它并将二进制文件放在正确的工作目录中
- 将
cmd.Stdout
和 cmd.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
希望你能给我一些线索。提前致谢!
问题出在这里:
ldflags "-s -w"
拆分时,这将产生三个参数,而不是两个,即 ldflags
、"-s
和 -w"
。
一个一个地构建数组元素而不是拆分。对于 ldflags,使用:
args:=[]string { "go",
...
"ldflags",
"-s -w",
...
}
我的问题:
我想使用内置的 exec 包从 golang 代码调用 go build
命令。对于许多外部程序,这工作得很好。但是对于 go build
,它似乎不太正确。
它总是 returns exit status 2
编辑 #1:当 运行 普通命令行 window 或 powershell window 中的命令时,一切正常。
到目前为止我尝试了什么:
- 设置
cmd.Path
和cmd.Dir
到工作目录 - 而不是 运行 它与
go run
,我编译它并将二进制文件放在正确的工作目录中 - 将
cmd.Stdout
和cmd.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
希望你能给我一些线索。提前致谢!
问题出在这里:
ldflags "-s -w"
拆分时,这将产生三个参数,而不是两个,即 ldflags
、"-s
和 -w"
。
一个一个地构建数组元素而不是拆分。对于 ldflags,使用:
args:=[]string { "go",
...
"ldflags",
"-s -w",
...
}