Piszę program w Go, który wykonuje program podobny do serwera (także Go). Teraz chcę mieć standardowe wyjście programu potomnego w moim oknie terminala, w którym uruchomiłem program nadrzędny. Jednym ze sposobów jest użycie cmd.Output()
funkcji, ale wypisuje ona standardowe wyjście dopiero po zakończeniu procesu. (To problem, ponieważ ten program podobny do serwera działa przez długi czas i chcę odczytać dane wyjściowe dziennika)
Zmienna out
ma wartość type io.ReadCloser
i nie wiem, co mam z nią zrobić, aby wykonać swoje zadanie, i nie mogę znaleźć w sieci nic pomocnego na ten temat.
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()
}
Wyjaśnienie do kodu: odkomentuj Println
funkcję, aby uzyskać kod do skompilowania, wiem, że Println(out io.ReadCloser)
nie jest to znacząca funkcja.
(generuje wynik &{3 |0 <nil> 0}
) Te dwa wiersze są potrzebne tylko do pobrania kodu do kompilacji.
io.Copy
w ramach procedur go
cmd.Wait()
ani for{}
pętli ... dlaczego te tutaj są?