使用空格将变量发送到子进程调用 - python 2.7

sending variables to subprocess call with spaces - python 2.7

我想将 ffmpeg 选项添加到一个变量,然后在子进程调用中使用它。如果变量包含一个词,一切都很好,但如果它包含多个词,我就会出错。我正在处理一个更大的脚本,我需要为某些编解码器提供额外的选项,例如这个。我怎样才能让它工作?

以下内容非常适合我:

import subprocess
import sys

video_codec = 'libx264'
output = sys.argv[1] + '.mkv'
subprocess.call(['ffmpeg',
            '-i',sys.argv[1], 
            '-c:v',video_codec,
            '-c:a','copy',         
            output])    

一旦我将新的 options/spaces 介绍给 video_options 之后:

video_codec = "'libx264', '-pix_fmt', 'yuv420p'"

我收到一个 ffmpeg 错误:

Unknown encoder ''libx264', '-pix_fmt', 'yuv420p''

如果我删除双引号并只使用 video_codec = 'libx264', '-pix_fmt', 'yuv420p'

我收到 python 错误: 追溯(最近一次通话): <module> 中的文件 "testo.py",第 10 行 输出])<br> 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第 524 行,在调用中 return Popen(*popenargs, **kwargs).wait() 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第 711 行,在 __init__ 读错,写错) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py”,第 1308 行,在 _execute_child 中 提高 child_exception TypeError: execv() arg 2 必须只包含字符串

Eric Renouf 说得对,但不要创建字符串,它不太可靠。你只需要像这样分解你的配置:

video_codecs = ['libx264', '-pix_fmt', 'yuv420p']
output = sys.argv[1] + '.mkv'
cmd_list = ['ffmpeg',
        '-i',sys.argv[1], 
        '-c:v']
cmd_list += video_codecs
cmd_list += ['-c:a','copy',         
        output]
subprocess.call(cmd_list)

我不确定顺序是否重要,所以我把它保留在这里,如果顺序不重要,你可以把最后一行和第三行结合起来。