Sto scrivendo un programma in Go che esegue un programma come server (anche Go). Ora voglio avere lo stdout del programma figlio nella mia finestra di terminale in cui ho avviato il programma padre. Un modo per farlo è con la funzione cmd.Output()
, ma questo stampa lo stdout solo dopo che il processo è terminato. (Questo è un problema perché questo programma simile a server viene eseguito per molto tempo e voglio leggere l'output del registro)Reindirizzare la pipa stdout del processo figlio in Go
La variabile out
è di type io.ReadCloser
e non so cosa dovrei fare per raggiungere il mio compito e non riesco a trovare nulla di utile sul web su questo argomento.
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()
}
Spiegazione per il codice: rimuovere il commento la funzione Println
per ottenere il codice da compilare, so che Println(out io.ReadCloser)
non è una funzione significativa.
(produce l'uscita &{3 |0 <nil> 0}
) Queste due righe sono solo necessarie per ottenere il codice da compilare.
La riga "exec" della dichiarazione di importazione deve essere "os/exec". – evilspacepirate
grazie per le informazioni, in realtà era solo exec pre go1, ora è in os. aggiornato per go1 – mbert
Non penso che sia effettivamente necessario chiamare 'io.Copy' all'interno delle routine di go – rmonjo