Maison > développement back-end > Golang > Comment canaliser correctement les commandes dans le package « os/exec » de Go ?

Comment canaliser correctement les commandes dans le package « os/exec » de Go ?

Patricia Arquette
Libérer: 2024-11-19 15:52:03
original
704 Les gens l'ont consulté

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

Commandes de tuyauterie dans Go à l'aide du package Exec

Les commandes de tuyauterie dans Go peuvent être réalisées à l'aide du package os/exec. Cependant, lorsque vous tentez de transférer le résultat d’une commande vers une autre, des difficultés peuvent survenir. Cet article aborde ces défis et propose une solution.

Considérez la commande suivante qui redirige la sortie standard de phantomjs vers ffmpeg pour créer une vidéo à partir d'images capturées :

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
Copier après la connexion

Problème :

Exécuter cette commande avec exec.Command(parts[0], parts[1:]...), où parts représente les composants de la commande, n'honore pas le tube.

Solution :

Pour canaliser efficacement la sortie, utilisez l'approche suivante :

Utilisez exec.Command("bash", "-c", command) pour exécuter la commande sous forme de script bash, où commande est la commande redirigée souhaitée. Cette méthode gère les tubes de manière transparente.

Exemple :

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))
}
Copier après la connexion

En exécutant la commande en tant que script bash, le tube est désormais honoré, permettant à la sortie de phantomjs d'être introduite de manière transparente dans ffmpeg.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal