使用 Exec 套件在 Go 中執行管道指令
Go 中的管道指令可以使用 os/exec 套件來實現。然而,當嘗試將一個命令的輸出透過管道傳輸到另一個命令時,可能會出現困難。本文解決了此類挑戰並提供了解決方案。
考慮以下命令,將標準輸出從phantomjs 傳輸到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(parts[0], parts[1:]...) 執行此命令,其中parts代表命令組件,不支援管道。
解決方案:
要有效地透過管道輸出,請採用以下方法:
使用exec.Command("bash", "- c", command) 執行作為bash 腳本的命令,其中command 是所需的管道命令。此方法透明地處理管道。
範例:
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)) }
透過將指令作為 bash 腳本執行,現在可以使用管道,從而允許 phantomjs 的輸出無縫地輸入到 ffmpeg 中。
以上是如何在 Go 的 `os/exec` 套件中正確傳輸指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!