1 回答
TA贡献1827条经验 获得超4个赞
看来你应该能够通过exec.ExitError
, see exec package获得它。请注意,您可能需要 Go 1.12。这是一个可运行的示例(但它不会在 go Playground 上为您提供实际的输出):
package main
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
)
func main() {
cmd := exec.Command(`/bin/bash`, `-c`, `FOO=bar ls /foo`)
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
stdOut, err := cmd.StdoutPipe()
if err != nil {
fmt.Println("Error 1")
}
if err := cmd.Start(); err != nil {
fmt.Println("Error 2")
}
bytes, err := ioutil.ReadAll(stdOut)
if err != nil {
fmt.Println("Error 3")
}
if err := cmd.Wait(); err != nil {
fmt.Println("Error 4")
if exitError, ok := err.(*exec.ExitError); ok {
fmt.Printf("Exit code is %d\n", exitError.ExitCode())
}
}
fmt.Println(string(bytes))
}
在我的系统上打印:
$ go run main.go
ls: cannot access '/foo': No such file or directory
Error 4
Exit code is 2
如果这对您不起作用,也许值得遵循 @JimB 的建议并直接调用 helm ?Go 标准库也应该支持管道:
它包装了 os.StartProcess 以便更轻松地重新映射 stdin 和 stdout、使用管道连接 I/O 以及进行其他调整。
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报