Python+;ffmpeg TypeError:在字符串格式化过程中未转换所有参数

Python+;ffmpeg TypeError:在字符串格式化过程中未转换所有参数,python,ffmpeg,stdout,popen,Python,Ffmpeg,Stdout,Popen,我正在向python中的函数发送一个文件,并试图将结果保存到一个变量中,但我一直收到该错误 我已经看过了其他的答案,但似乎没有一个是合适的。感谢您的帮助: def ffmpegLUFS(fileName): subprocess.Popen("ffmpeg -i %s -filter_complex ebur128 -f null - 2>&1 | grep -n '.*' | grep -A 5 'size' | grep 'I:' | cut -d ':' -f3-"

我正在向python中的函数发送一个文件,并试图将结果保存到一个变量中,但我一直收到该错误

我已经看过了其他的答案,但似乎没有一个是合适的。感谢您的帮助:

def ffmpegLUFS(fileName):
    subprocess.Popen("ffmpeg -i %s -filter_complex ebur128 -f null - 2>&1 | grep -n '.*' | grep -A 5 'size' | grep 'I:' | cut -d ':' -f3-" % tuple(map(pipes.quote, sys.argv[1])),stdout=subprocess.PIPE,shell=True).communicate()[0]
    return
回溯(最近一次呼叫最后一次):
文件“/Volumes/videos/videos/DROP_BIN/CHRIS/POD_Workflow_Files/WebContent_Audio.py”,第30行,在
sourceLUFS=ffmpegLUFS(sys.argv[1])
文件“/Volumes/videos/videos/DROP_BIN/CHRIS/POD_Workflow_Files/WebContent_Audio.py”,第18行,以ffmpegLUFS格式
subprocess.Popen(“ffmpeg-i%s-filter_complex ebur128-f null-2>&1 | grep-n'.*”| grep-A 5'size'| grep'i:'| cut-d':'-f3-%tuple(map(pipes.quote,fileName)),stdout=subprocess.PIPE,shell=True)。communicate()[0]
TypeError:在字符串格式化过程中并非所有参数都已转换

我不确定这部分代码的目的是什么:

tuple(map(pipes.quote, sys.argv[1]))
获取函数和iterable,并返回通过将函数应用于iterable的每个元素而获得的列表[1]。在您的例子中,iterable是一个字符串,字符串的元素是它的字符,因此
map(pipes.quote,sys.argv[1])
的结果将是字符串中的字符列表,根据需要引用。例如,如果
sys.argv[1]
长度为10个字符,
map(pipes.quote,sys.argv[1])
将是长度为10的列表

我只能在命令行字符串中看到一个
%s
占位符,因此除非
sys.argv[1]
恰好只包含一个字符,否则您将遇到“并非所有参数都已转换…”异常,因为字符串中的
%s
占位符的数量与试图输入字符串的值的数量不同

在我看来,最简单的修复方法是删除对
tuple
map
的调用,只需使用
pipes.quote(sys.argv[1])


[1]
map()。当给出两个参数时,其行为如我所述。

请包含完整的错误回溯。谢谢!这很有帮助。我在使用pipes.quote(sys.argv[1])时遇到的一个问题是文件名中,他们在文件名中放置了一个“##”。剧本现在已经挂断了。我该如何解决这个问题?下面是一个我在处理文件名时看到的示例:/Users/chrismith/Downloads/TRAININGSKU#u AbbySunderland\\\\\ 157487。aif@SonicMotion:您确定它抱怨的是
#
字符吗?文件名在5和前7之间有两个奇数Unicode字符。此外,你说的“挂断”到底是什么意思?我不确定这是不是问题所在,我现在遇到的错误是:OSError:[Errno 2]没有这样的文件或目录-所以我的第一个想法是“挂断”。当我说“挂断”时,我的意思是,我被难住了。@SonicMotion:在这种情况下,我提到的Unicode字符很可能是问题所在。我没有你的文件,也不知道你是如何调用脚本的,所以我不确定我还能帮你什么。这解决了我的unicode问题:“subprocess.call(['ffmpeg','-I',fileName',filter_complex',ebur128','-f','null','-2>&1 |'grep-n'.*'| grep-a5'大小'| grep'I:'| cut d'.'-d':'-f3-“])”