One minute
Golang 执行系统外部命令
最近在做php服务迁移,遇到了需要调用系统外部命令(ffmpeg),处理视频预览图的情况,以前php是直接找了轮子(php-ffmpeg)解决的,但本质其实也就是调用了相关函数执行系统外部的命令。golang也有os/exec这个包支持,标注一下备忘。
1、其实主要是以下几个方法
func Command(name string, arg ...string) *Cmd
func (c *Cmd) Output() ([]byte, error)
func (c *Cmd) CombinedOutput() ([]byte, error)
通过调用exec.Command()
执行系统外部命令,通过*Cmd.Output()
或者*Cmd.CombinedOutput()
获取执行结果输出。
需要注意的是exec.Command()
这个方法的传参。
例如下面的命名:ffmpeg -i input.flv -ss 00:00:14.435 -vframes 1 out.png
对应的调用方式是:exec.Command("ffmpeg", "-i", "input.flv", "-ss", "00:00:00", "-vframes", "1", "out.png")
2、针对1中提到的情况,写了个例子。
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
cmd := "/usr/local/bin/ffmpeg"
args := "-i %s -ss 00:00:00 -vframes 1 %s"
output, err := exec.Command(cmd, strings.Split(fmt.Sprintf(args, "input.flv", "out.png"), " ")...).CombinedOutput()
fmt.Printf("err: %v\nout: %v\n", err, string(output))
}
参考