我正在通过调用如下的os/exec包运行命令:
out, err := Exec("ffprobe -i '/media/Name of File.mp3' -show_entries format=duration -v quiet -of csv=p=0", true, true)
我编写的用于执行命令行调用的函数是:
func Exec(command string, showOutput bool, returnOutput bool) (string, error) {
log.Println("Running command: " + command)
lastQuote := rune(0)
f := func(c rune) bool {
switch {
case c == lastQuote:
lastQuote = rune(0)
return false
case lastQuote != rune(0):
return false
case unicode.In(c, unicode.Quotation_Mark):
lastQuote = c
return false
default:
return unicode.IsSpace(c)
}
}
parts := strings.FieldsFunc(command, f)
//parts = ["ffprobe", "-i", "'/media/Name of File.mp3'", "-show_entries", "format=duration", "-v", "quiet", "-of", "csv=p=0"]
if returnOutput {
data, err := exec.Command(parts[0], parts[1:]...).Output()
if err != nil {
return "", err
}
return string(data), nil
} else {
cmd := exec.Command(parts[0], parts[1:]...)
if showOutput {
cmd.Stderr = os.Stderr
cmd.Stdout = os.Stdout
}
err := cmd.Run()
if err != nil {
return "", err
}
}
return "", nil
}
该strings.Fields命令将命令拆分为空格,并将其用作字符串数组以传递给 exec.Command 函数。问题在于它将文件名分成不同的部分,因为filepath需要保持在一起的空间。即使我正确格式化了字符串数组,所以filepath它在一个部分中,exec.Command仍然会失败,因为有一个空格。我需要能够执行此脚本以将filepath空格作为一个参数。
慕桂英3389331
慕妹3146593
相关分类