Heim >Backend-Entwicklung >Golang >Wie leitet man Befehle im Go-Paket „os/exec' richtig weiter?

Wie leitet man Befehle im Go-Paket „os/exec' richtig weiter?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 15:52:03701Durchsuche

How to Properly Pipe Commands in Go's `os/exec` Package?

Piping-Befehle in Go mit dem Exec-Paket

Piping-Befehle in Go können mit dem os/exec-Paket erreicht werden. Beim Versuch, die Ausgabe eines Befehls an einen anderen weiterzuleiten, können jedoch Schwierigkeiten auftreten. Dieser Artikel befasst sich mit solchen Herausforderungen und bietet eine Lösung.

Betrachten Sie den folgenden Befehl, der die Standardausgabe von phantomjs an ffmpeg weiterleitet, um aus aufgenommenen Bildern ein Video zu erstellen:

phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4

Problem:

Ausführen dieses Befehls mit exec.Command(parts[0], parts[1:]...), wobei parts die Befehlskomponenten darstellt, berücksichtigt die Pipe nicht.

Lösung:

Um die Ausgabe effektiv weiterzuleiten, verwenden Sie „epple“. Der folgende Ansatz:

Verwenden Sie exec.Command("bash", "-c", command), um den Befehl als Bash-Skript auszuführen, wobei command der gewünschte Pipeline-Befehl ist. Diese Methode behandelt Pipes transparent.

Beispiel:

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := "phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4"
    output, err := exec.Command("bash", "-c", cmd).Output()
    if err != nil {
        fmt.Printf("Failed to execute command: %s", cmd)
    }
    fmt.Println(string(output))
}

Durch die Ausführung des Befehls als Bash-Skript wird die Pipe nun berücksichtigt, sodass die Ausgabe von PhantomJS nahtlos in ffmpeg eingespeist werden kann.

Das obige ist der detaillierte Inhalt vonWie leitet man Befehle im Go-Paket „os/exec' richtig weiter?. 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