当运行下面的代码时:

1
2
3
4
5
6
7
8
9
cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\\")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Result: " + out.String())

我得到这个错误:

1
exit status 1

解决方案是使用StderrCommand对象的属性。这可以这样做:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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
exit status 1: find: -exec: no terminating ";" or "+"