如何隐藏终端命令的输出

我有一个复杂的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",代码工作正常,命令跳过而不运行。


我做错了什么?我该如何修复它?


喵喵时光机
浏览 142回答 1
1回答

四季花海

您可以简单地将输出放入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.Buffervar execErr bytes.Buffercmd.Stdout = &execOutcmd.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 = nilcmd.Stderr = nilerr := cmd.Run()if err != nil {    fmt.Println("Cannot Execute cmd: ", err.Error())}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go