我正在尝试使用以下代码行在 go 中运行命令。 cmd := exec.Command(shell, `-c`, unsliced_string)
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Run()变量 shell 是从 os.Getenv("$SHELL") 收集的,变量 unsliced_string 是从命令行提供的参数。我需要命令运行后的状态/错误代码。因此,如果正在运行的命令(来自命令)是exit 100,我需要一个保存错误状态代码的变量,在本例中为 100总的来说,我需要一个变量来记录命令运行的错误代码我尝试过使用 .Error() 但是它exit status 100不仅仅是100 作为最后的手段,我可以使用 strings.Replaceall 或 strings.Trim
1 回答
慕容708150
TA贡献1831条经验 获得超4个赞
当然,有两种方法:
cmd := exec.Command(shell, `-c`, unsliced_string)
err := cmd.Run()
if exitErr, ok := err.(*exec.ExitError); ok {
exitCode := exitErr.ExitCode()
fmt.Println(exitCode)
} else if err != nil {
// another type of error occurred, should handle it here
// eg: if $SHELL doesn't point to an executable, etc...
}
cmd := exec.Command(shell, `-c`, unsliced_string)
_ := cmd.Run()
exitCode := cmd.ProcessState.ExitCode()
fmt.Println(exitCode)
我强烈建议您使用第一个选项,这样您就可以捕获所有exec.ExitError's 并按照您的意愿处理它们。如果命令没有退出或者底层命令由于另一个错误而永远不会运行,则不会填充 cmd.ProcessState ,因此使用第一个选项更安全。
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消