google golang exec exit status 2 and 1

25,296

You don't provide any arguments for the exec.Run dexdump command, which possibly generates an error like:

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

What output do you get when you run the following version of the program?

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)
    }
}
Share:
25,296
user1746360
Author by

user1746360

Updated on October 15, 2020

Comments

  • user1746360
    user1746360 over 3 years

    I want execute the dexdump in Android SDK platform-tools on Go language.

    I already set the PATH variable. (I'm use Ubuntu 12.04)

    Here is my code:

    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())
    }
    

    Result: /home/gunwoo/android-sdk-linux/platform-tools/dexdump

    2012/10/15 16:44:39 exit status 2

    exit status 1

    why go doesn't find the path?

  • user1746360
    user1746360 over 11 years
    Thank you! I expect to print dexdump usage comment without argument.
  • Matt
    Matt over 11 years
    The usage message is probably going to stderr, not stdout. Also the program is returning a non-zero exit code when it prints the usage message, which triggers your log.Fatal(err2) command. If you want to see the output, set cmd.Stderr = &out and move fmt.Printf("%q\n", out.String()) to before your if err2 != nil line.