Golang での複雑なパイプされたコマンドの実行
Golang では、os/exec パッケージを利用すると、プログラム内でコマンドを実行する便利な方法が提供されます。ただし、特定のシナリオでは、パイプを含む高度なコマンドを実行する必要がある場合があります。この場合、あるコマンドの出力が別のコマンドの入力として機能します。
次の例を考えてみましょう。目的は、phantomjs とパイプを使用して Web ページを記録することです。結果の画像を ffmpeg に渡してビデオを作成します:
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
従来、exec.Command メソッドを使用するとパイプが正しく解釈されない可能性があり、それは効果がありません。この制限を克服するには、次のアプローチを利用します。
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 { return fmt.Sprintf("Failed to execute command: %s", cmd) } fmt.Println(string(output))
この改良されたバージョンでは、中間コマンド ランナーとして bash を使用します。 -c フラグを指定して bash を呼び出し、パイプされたコマンド文字列全体を引数として渡すことで、複雑な操作を実行するように bash に効率的に指示できます。
このアプローチにより、Go プログラム内で複雑なパイプされたコマンドを実行できるようになり、より優れた処理を実現できます。システムの相互作用に対する柔軟性と制御。
以上がGolang で複雑なパイプされたコマンド (phantomjs | ffmpeg など) を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。