一般运行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

从而无法知道真正发生的错误

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。