2012-10-15 59 views
3

我想在Go语言中执行Android SDK平台工具中的dexdump。google golang exec退出状态2和1

我已经设置了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()) 
} 

结果: /家庭/ gunwoo/Android的SDK-LINUX /平台工具/ dexdump

十分之二千零十二/ 15 16点44分39秒退出状态2

退出状态1

为什么走,不找到路径?

+0

什么是**特定的**方式_“我已经设置了PATH变量。”_? – zzzz

+0

我在.profile中写入“export PATH = $ PATH:$ HOME/android-sdk-linux/platform-tools” – user1746360

回答

4

你不提供对exec.Rundexdump命令,该命令可能产生类似的错误任何参数:

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 

做,当你运行该程序的版本之后,你得到什么输出?

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) 
    } 
} 
+0

谢谢!我希望打印dexdump使用注释而无需参数。 – user1746360

+1

用法消息可能会变为'stderr',而不是'stdout'。此外,程序在打印使用信息时会返回非零退出代码,这会触发您的'log.Fatal(err2)'命令。 如果您想查看输出,请设置'cmd.Stderr =&out'并将'fmt.Printf(“%q \ n”,out.String())'移动到'if err2!= nil'行之前。 – Matt

+0

谢谢你马特:) – user1746360