使用空格将变量发送到子进程调用 - 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)
我不确定顺序是否重要,所以我把它保留在这里,如果顺序不重要,你可以把最后一行和第三行结合起来。
我想将 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)
我不确定顺序是否重要,所以我把它保留在这里,如果顺序不重要,你可以把最后一行和第三行结合起来。