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 outma wartość type io.ReadCloseri 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 Printlnfunkcję, 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.Copyw ramach procedur go
cmd.Wait()ani for{}pętli ... dlaczego te tutaj są?