27

シェル コマンドを実行し、stdout をキャプチャして、その出力をファイルに書き込もうとしています。ただし、プログラムが存在するときに書き込もうとしているファイルが空であるため、いくつかの手順が欠けているようです。コマンドの 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()
}
4

3 に答える 3

46

irc チャンネルの KirkMcDonald のおかげで#go-nuts、出力ファイルを に割り当てることでこれを解決しました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()
}
于 2013-09-24T16:30:00.457 に答える