一般运行cmd命令时,使用的是:
cmd := exec.Command("sh", "-c",cmdStr)
// 执行命令并获取输出
output, err := cmd.Output()
或者
// 执行命令并获取输出的详细信息
output, err := cmd.CombinedOutput()
但是我在实际使用中,运行上面的语句时,由于输入的命令不可控,有可能会有报错,那么上面的语句有些时候可以拿到报错,有些时候无法拿到报错的详细信息,所以需要改成下面的写法:
cmd := exec.Command("find","\\")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
return
}
fmt.Println("Result: " + out.String())
使用这种写法,会说明问题是什么
exit status 1: find: ‘\\’: 无效的参数
而如果用最开头的那种写法,基本都只是得到:
exit status 1
从而无法知道真正发生的错误