2013-09-24 7 views
20

मैं एक शेल कमांड चलाने, stdout पर कब्जा करने और फ़ाइल को उस आउटपुट को लिखने की कोशिश कर रहा हूं। हालांकि, मुझे कुछ कदम याद आ रहे हैं, क्योंकि जिस फ़ाइल को मैं लिखने की कोशिश कर रहा हूं वह खाली है जब प्रोग्राम मौजूद है। मैं आदेश के stdout को कैप्चर कैसे कर सकता हूं और उसे फ़ाइल में लिख सकता हूं?गोलांग में मैं एक exec.Cmd के stdout कैसे लिख सकता हूँ फ़ाइल में?

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

उत्तर

12

आप लेखक फ्लश करने के लिए की जरूरत है। निम्नलिखित जोड़ें: #go-nuts irc चैनल पर KirkMcDonald को

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

दुह, मुझे पता था कि मुझे कुछ याद आ रहा था। – jergason

32

धन्यवाद, मैं cmd.Stdout को आउटपुट फ़ाइल बताए द्वारा इस हल, जिसका अर्थ है कि stdout फाइल करने के लिए सीधे लिखते हैं। यह इस तरह दिखता है:

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

तुम भी उपयोग कर सकते हैं:

cmd.Stdout = os.Stdout 

जो ओएस 'मानक आउटपुट में सभी cmd उत्पादन पर पहुंच जाएंगे।

संबंधित मुद्दे