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
Freigeben: 2024-11-20 13:32:17
Original
428 Leute haben es durchsucht

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage