2016-05-04 6 views
2

I持たなどのテキスト抽出のために行われたときに、私はまたcmd.Stdoutからフル出力を取得したいと思うこのコードは、exec.Commandから完全なStdoutを取得するには?

func main() { 
    cmd := exec.Command("readinggame") 
    cmd.Stdout = os.Stdout 
    cmd.Run() 
} 

私は[]byteとしてどちらかの出力を得るための方法を見つけるように見えることはできませんまたはそれが完了したとき。ところで、私はこれは正確に予測された結果である

var out bytes.Buffer 
cmd.Stdout = &out 
if err := cmd.Run(); err != nil { 
    log.Fatal(err) 
} 
fmt.Println(out.String()) 
+0

bytes.Bufferを使用すると何が問題になりますか? 'cmd.Output'や' cmd.CombinedOutput'を使わないのはなぜですか? – JimB

+0

'bytes.Buffer'では、すべてのデータを' os.Stdout'にストリームしているので、 'cmd.Stdout'から何も取得できないというエラーがあります。 'cmd.Output'を使うことはできませんbcos出力を' os.Stdout'にストリームしたいのです...長時間実行しているアプリケーションの場合 –

答えて

3

のようなもの、私はちょうど、外出先での完全な出力をしたい、うまく動作するように起こるReadLine(または類似したもの)で出力を反復することにしたくありません...必要なものはすべてio.MultiWriterでした。

func main() { 

    cmd := exec.Command("ping", "google.com") 

    var out bytes.Buffer 
    multi := io.MultiWriter(os.Stdout, &out) 
    cmd.Stdout = multi 

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

    fmt.Printf("\n*** FULL OUTPUT *** %s\n", out.String()) 

} 
関連する問題