2016-11-18 3 views
1

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)'を使用して出力をテキストとして表示します。 –

答えて

1

このコードは:

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

この1つはいくつかのランダムな文字列を出力バイナリファイルを実行している私のために動作します。

+0

これには良い方法がありますか?これは別のジョブとして実行されます。それをゴルーチンの下で走らせることはそれを悪くしてしまいます。より多くのジョブが同時に実行され、最終的にはすべてのサーバーリソースが使用されます。 – Mir

5

私は出力を得ることができます。

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

バイナリファイルを最初にチェックするか、バイナリファイルパスを修正しています。エラーメッセージを印刷してみてください。 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 
} 

.... 

私は正常にバイナリファイルを使用して実行しますしている:私はそれがエラーを返すだけのパッケージexeで構造体であるCmdを返すdoes notのexec.Command()のソースを探しています

関連する問題