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
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)) }
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!