Last active
October 10, 2019 12:41
-
-
Save SRsawaguchi/fdde35959a31aeed3eb0a0811899387b to your computer and use it in GitHub Desktop.
コマンドの終了を待たずに、stdoutされた文字列(途中結果としt出力された文字列)をリアルタイムに取得するプログラム。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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