Heim > Backend-Entwicklung > Golang > Wie rufe ich Echtzeitausgaben von Shell-Befehlen in Go ab?

Wie rufe ich Echtzeitausgaben von Shell-Befehlen in Go ab?

Mary-Kate Olsen
Freigeben: 2024-12-11 02:56:09
Original
270 Leute haben es durchsucht

How to Retrieve Realtime Output from Shell Commands in Go?

Echtzeitausgabe von Shell-Befehlen in Go abrufen

Problem:

Sie möchten ausführen Shell-Befehle in Go, die einige Zeit in Anspruch nehmen und ihre Echtzeitausgabe abrufen, um sie zu verarbeiten und als Fortschritt anzuzeigen Informationen.

Lösung:

1. Verwenden Sie os/exec für die Shell-Befehlsausführung:

Erstellen Sie einen Befehl mit exec.Command, um den gewünschten Shell-Befehl auszuführen.

2. Capture Standard Error (stderr) Ausgabe:

Standardmäßig werden Diagnosemeldungen von Shell-Befehlen an stderr statt an stdout gesendet. Verwenden Sie cmd.StderrPipe(), um den stderr-Stream zu erfassen.

3. Erstellen Sie einen Scanner zum Lesen der Ausgabe:

Verwenden Sie bufio.NewScanner, um einen Scanner zu erstellen, der den stderr-Stream liest. Teilen Sie den Scan mit bufio.ScanWords in Wörter auf, um einzelne Ausgabezeilen zu erhalten.

4. Ausgabe verarbeiten und anzeigen:

Verwenden Sie innerhalb einer Schleife die Methode scanner.Scan(), um jede Ausgabezeile abzurufen. Verarbeiten Sie es, um die gewünschten Informationen zu extrahieren, beispielsweise das Fortschrittsverhältnis. Zeigen Sie dann die verarbeitete Ausgabe an.

5. Beispielcode:

Hier ist ein Beispielcode, der zeigt, wie das geht:

package main

import (
    "bufio"
    "fmt"
    "os/exec"
    "strings"
)

func main() {
    args := "-i test.mp4 -acodec copy -vcodec copy -f flv rtmp://aaa/bbb"
    cmd := exec.Command("ffmpeg", strings.Split(args, " ")...)

    stderr, _ := cmd.StderrPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stderr)
    scanner.Split(bufio.ScanWords)
    for scanner.Scan() {
        m := scanner.Text()
        fmt.Println(m)
    }
    cmd.Wait()
}
Nach dem Login kopieren

Durch Befolgen dieser Schritte können Sie die Echtzeitausgabe von Shell-Befehlen und -Prozessen abrufen es, um Fortschrittsinformationen oder andere gewünschte Informationen anzuzeigen.

Das obige ist der detaillierte Inhalt vonWie rufe ich Echtzeitausgaben von Shell-Befehlen in Go ab?. 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