亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何隱藏終端命令的輸出

如何隱藏終端命令的輸出

Go
喵喵時光機 2023-07-17 13:58:47
我有一個復雜的ffmpeg命令要執行,我需要使用 Go 來執行。該命令正在工作,當我嘗試使用隱藏命令的輸出時,問題就出現了> /dev/null 2>&1這是我的代碼:cmd := exec.Command(    "ffmpeg",    "-y",    "-loglevel", "warning",    "-i", ConvertImage,    "-i", videoInput,    "-c:v", cv,    "-c:a", audioCodec,    "-crf", fmt.Sprintf("%d", crf),    "-map", "[v]",    "-map", "1:a?",    "-r", fmt.Sprintf("%d", Res.FrameRate),    "-strict",    "-2",    outputFile,    "> /dev/null 2>&1",)當我嘗試隱藏命令的輸出時,沒有最后一個字段"> /dev/null 2>&1",代碼工作正常,命令跳過而不運行。我做錯了什么?我該如何修復它?
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

您可以簡單地將輸出放入bytes.Buffer變量中,如下所示:


cmd := exec.Command(

    "ffmpeg",

    "-y",

    "-loglevel", "warning",

    "-i", ConvertImage,

    "-i", videoInput,

    "-c:v", cv,

    "-c:a", audioCodec,

    "-crf", fmt.Sprintf("%d", crf),

    "-map", "[v]",

    "-map", "1:a?",

    "-r", fmt.Sprintf("%d", Res.FrameRate),

    "-strict",

    "-2",

    outputFile,

)


var execOut bytes.Buffer

var execErr bytes.Buffer

cmd.Stdout = &execOut

cmd.Stderr = &execErr

通過這樣做,輸出和錯誤都在相應的緩沖區中。


現在,如果您想打印它們,則可以將以下代碼片段與上述代碼一起使用:


err := cmd.Run()

if err != nil {

    fmt.Println("Cannot Execute cmd: ", err.Error())

}

outStr := execOut.String()

errStr := execErr.String()

if len(outStr) > 0 {

    fmt.Print(outStr)

}

if len(errStr) > 0 {

    fmt.Print(errStr)

}

更新:或者,如果您完全不需要 stdout 和 stderr,那么您可以將cmd.Stdout和設置cmd.Stderr為nil如下所示:


cmd.Stdout = nil

cmd.Stderr = nil


err := cmd.Run()

if err != nil {

    fmt.Println("Cannot Execute cmd: ", err.Error())

}


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號