首頁 > 後端開發 > Golang > 如何在 Go 的 `os/exec` 套件中正確傳輸指令?

如何在 Go 的 `os/exec` 套件中正確傳輸指令?

Patricia Arquette
發布: 2024-11-19 15:52:03
原創
703 人瀏覽過

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

使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板