2016-07-18 6 views
1

golangでシステムコマンドを実行しようとしています。私はstdoutを画面上に直接印刷したい。perlのgolangのようなシステムコマンドを実行中

out, err := exec.Command(cmd).Output() 
    if err != nil { 
     fmt.Println("error occured") 
     fmt.Printf("%s", err) 
    } 

ここで私は、変数「アウト」に出力を格納し、画面上にそれを印刷しています:golangで は、私は今、次を使用します。しかし、私はperlのsystem()コマンドのような通常のシェルコマンドとして出力するものが必要です。 Perlで

system("ls -l"); 

我々はここで何を保存する必要はありません。

perlのsystem()cmdとまったく同じgolangコマンドがあります。

答えて

0

私はあなたが何をしたいのオプションに建て見ることができない - 私は信じていますが、7ライン機能は十分であろう:

func system(cmd string, arg ...string) { 
    out, err := exec.Command(cmd, arg...).Output() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Println(string(out)) 
} 

次に、あなたは、単にそれを呼び出すことができます。

system("ls", "-l") 

だから、作業完全な例は以下のようになります。Cmd秒を返しCommand

package main 

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

func main() { 
    system("ls", "-l") 
} 

func system(cmd string, arg ...string) { 
    out, err := exec.Command(cmd, arg...).Output() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Println(string(out)) 
} 
+0

コマンドが完了するまでこれは、すべての出力をバッファします。コマンドが非インタラクティブかつクイックランニングであればうまく動作しますが、長時間実行するプログラムには不満足ですし、perlの 'system'コマンドと同じではありません。 –

5

機能タイルにはStdoutフィールドがあります。
は、あなただけのCmdさんStdout

例にOS Stdoutを添付する必要があります。

cmd := exec.Command("date") // no need to call Output method here 
cmd.Stdout = os.Stdout // instead use Stdout 
cmd.Stderr = os.Stderr // attach Stderr as well 

err := cmd.Run() 
if err != nil { 
    log.Fatal(err) 
} 

参照してください:Command documentation

+1

チェックされていないので、私は 'os.Stderr'を添付します。 – JimB

+0

@JimB - 指摘してくれてありがとう。私は答えを更新しました。 –

関連する問題