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

Patricia Arquette
Freigeben: 2024-11-19 15:52:03
Original
657 Leute haben es durchsucht

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

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

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!

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