如何在GoLang程序中运行二进制文件?

问题描述:

我想在GoLang程序中执行二进制文件。如何在GoLang程序中运行二进制文件?

这里是我的代码:

package main 

import (
    "fmt" 
    "os/exec" 
) 

func main() { 
    output, _ := exec.Command("/home/user/Golang/bin/hello").Output() 
    fmt.Println(output) 
} 

但我得到的输出:提前[]

感谢。

+0

检查'Output'返回的错误。另外,使用'fmt.Printf(“%s \ n”,output)'将输出视为文本。 –

当我在看exec.Command()源它不返回一个错误,但只返回Cmd这是结构在包exe:我已成功得到的二进制文件运行使用 source

.... 

func Command(name string, arg ...string) *Cmd { 
    cmd := &Cmd{ 
     Path: name, 
     Args: append([]string{name}, arg...), 
    } 
    if filepath.Base(name) == name { 
     if lp, err := LookPath(name); err != nil { 
      cmd.lookPathErr = err 
     } else { 
      cmd.Path = lp 
     } 
    } 
    return cmd 
} 

.... 

此代码:

package main 

import (

    "fmt" 
    "os/exec" 
) 

func main() { 
    command:= exec.Command("Your binary file path") 

    // set var to get the output 
    var out bytes.Buffer 

    // set the output to our variable 
    command.Stdout = &out 
    err = command.Run() 
    if err != nil { 
     log.Println(err) 
    } 

    fmt.Println(out.String()) 
} 

这个为我运行二进制文件打印一些随机字符串。

+0

有没有更好的办法呢?这将作为一个单独的工作来运行。在goroutine下运行它使它变得更糟糕。同时运行更多作业,最终将使用所有服务器资源。 – Mir

我可以得到输出。

package main 

import (
    "fmt" 
    "os/exec" 
) 

func main() { 
    output, err := exec.Command("/Users/duguying/gopath/bin/test").Output() 
    if err!=nil { 
     fmt.Println(err.Error()) 
    } 
    fmt.Println(string(output)) 
} 

检查你的二进制文件首先或二进制文件路径正在纠正。尝试打印出您的错误信息。