プログラムのようなサーバーを実行するプログラムをGoで作成しています(これもGoです)。ここで、親プログラムを開始したターミナルウィンドウに子プログラムのstdoutを配置します。これを行う1つの方法はcmd.Output()
関数を使用することですが、これはプロセスが終了した後にのみstdoutを出力します。(このサーバーのようなプログラムは長時間実行され、ログ出力を読みたいので、これは問題です)
変数out
はでtype io.ReadCloser
あり、自分のタスクを達成するためにそれをどうすればよいかわかりません。また、このトピックに関するWebで役立つものを見つけることができません。
func main() {
cmd := exec.Command("/path/to/my/child/program")
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
//fmt.Println(out)
cmd.Wait()
}
コードの説明:Println
関数のコメントを外してコードをコンパイルしPrintln(out io.ReadCloser)
ます。これは意味のある関数ではないことを知っています。
(出力を生成します&{3 |0 <nil> 0}
)これらの2行は、コードをコンパイルするためだけに必要です。
io.Copy
にgoルーチン内で呼び出す必要があるとは思いません
cmd.Wait()
やfor{}
ループが必要だとは思わない...なぜここにあるのか?