Heim > Backend-Entwicklung > Golang > Wie erhalte ich eine Echtzeitausgabe von Shell-Befehlen in Go?

Wie erhalte ich eine Echtzeitausgabe von Shell-Befehlen in Go?

Barbara Streisand
Freigeben: 2024-12-08 18:51:15
Original
482 Leute haben es durchsucht

How to Get Realtime Output from Shell Commands in Go?

So rufen Sie Echtzeitausgaben für Shell-Befehle in Go ab

Problem:

Beim Ausführen eines Shell-Befehls mit langer Laufzeit Wie können Sie in Go mit os/exec die Echtzeitausgabe abrufen und so verarbeiten, wie sie ist? verfügbar?

Lösung:

  1. Verwenden Sie stderr anstelle von stdout:

    ffmpeg ist bekanntermaßen Diagnosemeldungen an stderr statt an stdout ausgeben. Stellen Sie daher beim Erstellen des Befehlsobjekts eine Verbindung zu stderr statt zu stdout her.

  2. Ausgabe von stderr kontinuierlich lesen:

    Erstellen Sie einen bufio.Scanner für stderr und verwenden Sie die Scan-Methode, um die Ausgabe Zeile für Zeile oder Wort für Zeile zu lesen Wort.

  3. Ausgabe Zeile für Zeile verarbeiten:

    Im Beispielcode wird ein scanner.Split(bufio.ScanWords) zum Teilen verwendet die Ausgabe auf Leerzeichen. Passen Sie den Aufteilungstyp entsprechend Ihren Verarbeitungsanforderungen an.

  4. Ausgabe verarbeiten:

    Manipulieren Sie die Ausgabe auf die gewünschte Weise, z. B. durch Extrahieren und Verarbeiten Fortschrittsinformationen.

Beispiel Code:

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

Ausgabe:

Der Code druckt kontinuierlich die ffmpeg-Ausgabemeldungen, wie zum Beispiel:

frame=  101 fps=0.0 q=28.0 size=      91kB time=00:00:04.13 bitrate= 181.2kbits/s
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erhalte ich eine Echtzeitausgabe von Shell-Befehlen in Go?. 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