Durch die Ausführung von Befehlen in Go können Sie mit externen Prozessen interagieren, aber wenn Sie die Ausgabe in Echtzeit benötigen, gibt es eine Möglichkeit um dies zu erreichen.
In Ihrem Code-Snippet wird die Ausgabe auf einmal gedruckt, nachdem der Befehl abgeschlossen wurde. Um die Ausgabe live anzuzeigen, können Sie die unten beschriebene Technik integrieren:
// ... Previous code for _, cp := range cmdParams { log.Printf("Starting %s in folder %s...", cp[1:], cp[0]) cmd := exec.Command(cp[1], cp[2:]...) cmd.Dir = cp[0] stdout, err := cmd.StdoutPipe() if err != nil { log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err) return } // Start command: if err = cmd.Start(); err != nil { log.Printf("%s start error: %v\n", cp[1:], err) return } // Stream command output: scanner := bufio.NewScanner(stdout) scanner.Split(bufio.ScanRunes) for scanner.Scan() { fmt.Print(scanner.Text()) } if scanner.Err() != nil { log.Printf("Reading %s stdout error: %v\n", cp[1:], err) return } // Get execution success or failure: if err = cmd.Wait(); err != nil { log.Printf("Error running %s: %v\n", cp[1:], err) return } log.Printf("Finished %s", cp[1:]) } // ... Remaining code
Diese Modifikation verwendet einen bufio.Scanner, um die Standardausgabe des Befehls in Echtzeit zu lesen. Der Split(bufio.ScanRunes) weist den Scanner an, einzelne Zeichen zu lesen, wodurch Sie die Ausgabe anzeigen können, während sie generiert wird.
Durch wiederholtes Aufrufen von scanner.Scan() und Drucken von scanner.Text() bis Wenn das Ende der Ausgabe erreicht ist, können Sie die Ausgabe des Befehls live auf dem Bildschirm streamen.
Das obige ist der detaillierte Inhalt vonWie streame ich die Befehlsausgabe in Go für Live-Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!