我嘗試使用 ffprobe 獲取視頻文件持續(xù)時(shí)間。當(dāng)我運(yùn)行此代碼時(shí),出現(xiàn)錯(cuò)誤:退出狀態(tài)1:var out bytes.Buffervar stderr bytes.BuffercmdArgs := []string{"-i", "bunny.mp4", "-show_entries", "format=duration", "-v", "quiet", "-of", `csv="p=0"`}cmd := exec.Command("ffprobe", cmdArguments...)cmd.Stdout = &outcmd.Stderr = &stderrif err := cmd.Run(); err != nil { fmt.Println(fmt.Sprint(err) + ": " + stderr.String())}fmt.Printf("command output: %q\n", out.String())但是當(dāng)我傳遞參數(shù)時(shí)沒有-of csv="p=0"這樣:cmdArgs := []string{"-i", "bunny.mp4", "-show_entries", "format=duration", "-v", "quiet"}它可以工作并返回結(jié)果(但格式錯(cuò)誤):命令輸出:“[FORMAT]\nduration=3.008000\n[/FORMAT]\n”那么問題是什么以及如何解決呢?
1 回答

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
嘗試像這樣格式化參數(shù)(對(duì)字符串使用雙引號(hào)而不是反引號(hào)并刪除內(nèi)部雙引號(hào)):
cmdArgs?:=?[]string{...,?"csv=p=0"}
Goexec
包不會(huì)調(diào)用系統(tǒng) shell 來處理參數(shù),因此在指定它們時(shí)不需要采取相同的預(yù)防措施。在這種情況下,無需將第一個(gè)“=”后面的部分用引號(hào)引起來。
從包文檔中:
與 C 和其他語言的“系統(tǒng)”庫調(diào)用不同,os/exec 包有意不調(diào)用系統(tǒng) shell,也不擴(kuò)展任何 glob 模式或處理通常由 shell 完成的其他擴(kuò)展、管道或重定向。該包的行為更像是 C 的“exec”函數(shù)系列。要擴(kuò)展 glob 模式,請(qǐng)直接調(diào)用 shell,注意轉(zhuǎn)義任何危險(xiǎn)輸入,或使用 path/filepath 包的 Glob 函數(shù)。要擴(kuò)展環(huán)境變量,請(qǐng)使用 os 包的 ExpandEnv。
- 1 回答
- 0 關(guān)注
- 261 瀏覽
添加回答
舉報(bào)
0/150
提交
取消