Skip to content

Instantly share code, notes, and snippets.

@SRsawaguchi
Last active October 10, 2019 12:41
Show Gist options
  • Save SRsawaguchi/fdde35959a31aeed3eb0a0811899387b to your computer and use it in GitHub Desktop.
Save SRsawaguchi/fdde35959a31aeed3eb0a0811899387b to your computer and use it in GitHub Desktop.
コマンドの終了を待たずに、stdoutされた文字列(途中結果としt出力された文字列)をリアルタイムに取得するプログラム。
package main
import (
"fmt"
"io"
"os/exec"
)
func main() {
//わかりやすさのため、エラーハンドリングは省略
// シェルで実行するコマンドを作成
cmd := exec.Command("./command.sh")
// `StdoutPipe()` 経由で`io.ReadCloser`を取得
stdout, _ := cmd.StdoutPipe()
// バッファを作成
buff := make([]byte, 1024)
// コマンドを実行する
cmd.Start()
// 出力結果を取得(C言語系だとdo~whileみたいなことをしている)
n, err := stdout.Read(buff)
// EOFの場合は err == io.EOF となる
for err == nil || err != io.EOF {
// データがGET出来た場合、文字列に変換して表示
if n > 0 {
fmt.Print(string(buff[:n]))
}
// 再び読み込む
n, err = stdout.Read(buff)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment