2013-09-24 812 views
20

Bir kabuk komutunu çalıştırmaya, stdout yakalamaya ve bu çıktıyı bir dosyaya yazmaya çalışıyorum. Ancak, program yazarken yazmaya çalıştığım dosya boş olduğundan, birkaç adım eksik gibi görünüyor. Komutun stdout'unu nasıl yakalayabilirim ve bir dosyaya nasıl yazabilirim?Golang'da bir exec.md dosyasının stdout'unu bir dosyaya nasıl yazabilirim?

package main 

import (
    "bufio" 
    "io" 
    "os" 
    "os/exec" 
) 

func main() { 

    cmd := exec.Command("echo", "'WHAT THE HECK IS UP'") 

    // open the out file for writing 
    outfile, err := os.Create("./out.txt") 
    if err != nil { 
     panic(err) 
    } 
    defer outfile.Close() 

    stdoutPipe, err := cmd.StdoutPipe() 
    if err != nil { 
     panic(err) 
    } 

    writer := bufio.NewWriter(outfile) 

    err = cmd.Start() 
    if err != nil { 
     panic(err) 
    } 

    go io.Copy(writer, stdoutPipe) 
    cmd.Wait() 
} 

cevap

12

Yazarı yıkamanız gerekir. Aşağıdaki ekleyin:

writer := bufio.NewWriter(outfile) 
    defer writer.Flush() 
+0

Duh, Bir şeyleri kaçırdığımı biliyordum. – jergason

32

Teşekkür KirkMcDonald için #go-nuts irc kanalı üzerinde, ben stdout'u dosyaya doğrudan yazar, yani cmd.Stdout çıktı dosyasını atayarak bu çözüldü. Bu şuna benzer:

package main 

import (
    "os" 
    "os/exec" 
) 

func main() { 

    cmd := exec.Command("echo", "'WHAT THE HECK IS UP'") 

    // open the out file for writing 
    outfile, err := os.Create("./out.txt") 
    if err != nil { 
     panic(err) 
    } 
    defer outfile.Close() 
    cmd.Stdout = outfile 

    err = cmd.Start(); if err != nil { 
     panic(err) 
    } 
    cmd.Wait() 
} 
7

da kullanabilirsiniz:

cmd.Stdout = os.Stdout 

OS' standart çıkışa tüm cmd çıkış yönlendirir hangi.