Heim >Backend-Entwicklung >Golang >Wie streame ich die Befehlsausgabe in Go für Live-Ergebnisse?

Wie streame ich die Befehlsausgabe in Go für Live-Ergebnisse?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-20 13:32:17445Durchsuche

How to Stream Command Output in Go for Live Results?

Streaming der Befehlsausgabe für Live-Ergebnisse

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

Erklärung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn