google golang exec退出状态2和1

use*_*360 4 exec go

我想在Go语言的Android SDK平台工具中执行dexdump.

我已经设置了PATH变量.(我使用的是Ubuntu 12.04)

这是我的代码:

package main

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
)

func main() {
    path, err := exec.LookPath("dexdump")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(path)

    cmd := exec.Command(path)
    var out bytes.Buffer
    cmd.Stdout = &out
    err2 := cmd.Run()
    if err2 != nil {
        log.Fatal(err2)
    }
    fmt.Printf("%q\n", out.String())
}
Run Code Online (Sandbox Code Playgroud)

结果:/ home/gunwoo/android-sdk-linux/platform-tools/dexdump

2012/10/15 16:44:39退出状态2

退出状态1

为什么去找不到路径?

pet*_*rSO 5

您没有为该exec.Run dexdump命令提供任何参数,这可能会生成如下错误:

dexdump: no file specified
dexdump: [-f] [-h] dexfile...

-d : disassemble code sections
-f : display summary information from file header
-h : display file header details
-C : decode (demangle) low-level symbol names
-S : compute sizes only
Run Code Online (Sandbox Code Playgroud)

运行以下版本的程序时,您获得了什么输出?

package main

import (
    "bytes"
    "fmt"
    "log"
    "os/exec"
)

func main() {
    path, err := exec.LookPath("dexdump")
    if err != nil {
        log.Fatal("LookPath: ", err)
    }
    fmt.Println(path)
    cmd := exec.Command(path)
    var out bytes.Buffer
    cmd.Stdout = &out
    err = cmd.Run()
    fmt.Printf("%s\n", out.String())
    if err != nil {
        log.Fatal("Run: ", err)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 用法信息可能是"stderr",而不是"stdout".程序在打印用法消息时返回非零退出代码,触发你的`log.Fatal(err2)`命令.如果要查看输出,请设置`cmd.Stderr =&out`并将`fmt.Printf("%q \n",out.String())`移到`if err2!= nil`行之前. (2认同)