解决方案是使用Command对象的Stderr
属性.可以这样做:
cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\\")
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())
运行上面的代码,就可以清楚地知道问题是什么:
退出状态1:FIND:-EXEC:无终止";"或"+"
Edit:个
在上面的代码中,我们希望在出现错误的情况下,消息将打印到stderr,命令将返回非零错误代码.这或多或少是标准.
但是,正如@snorberhuis下面提到的,一些命令会将错误打印到stdout.其他命令可能会打印到stderr,但返回错误代码0(在这种情况下,err
将是nil
).在stderr中有消息并不一定意味着有错误(ffmpeg工具经常这样做).
因此,基本上,您可能需要调整上面的代码,以适应预期的命令.