运行 python 中具有多个参数的可执行文件
Running an executable with multiple parameters in python
我有一个巨大的命令 运行 具有多个参数的可执行文件。它是这样的:
ffmpeg.exe -f dshow -y -video_size 1920x1080 -rtbufsize 1404000k -r 30 -i video="HD Video 2 (TC-2000HDMI Card)" -threads 2 -vcodec copy -ar 48000 -ac 1 -acodec pcm_s16le -t 60 c:/output.avi
我为此使用 subprocess.Popen
但不确定如何使用 python 2.7
传递这么多参数
我浏览了很多帖子,其中之一是 this。我无法让它适用于多个参数。
需要这方面的帮助。
来自 subprocess.Popen
的示例显示了正确解析复杂命令行以传递给 Popen
的示例:
>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!
将它与 Python 的三重引号相结合以允许大多数引号变体会给你这样的东西(还没有 运行,抱歉命令行太长):
import shlex, subprocess
p = subprocess.Popen(slex.split("""ffmpeg.exe -f dshow -y -video_size 1920x1080 -rtbufsize 1404000k -r 30 -i video="HD Video 2 (TC-2000HDMI Card)" -threads 2 -vcodec copy -ar 48000 -ac 1 -acodec pcm_s16le -t 60 c:/output.avi"""))
.exe
建议您在 Windows 上,其中指定命令到 运行 的本机接口是一个字符串,即按原样粘贴字符串:
#!/usr/bin/env python
import subprocess
subprocess.check_call('ffmpeg.exe -f dshow -y -video_size 1920x1080 '
'-rtbufsize 1404000k -r 30 '
'-i video="HD Video 2 (TC-2000HDMI Card)" '
'-threads 2 -vcodec copy -ar 48000 -ac 1 -acodec pcm_s16le '
r'-t 60 c:\output.avi')
注意:该命令被拆分为多个文字,只是为了将其分布在多行中以便于阅读。 'a' 'b'
文字在 Python 中合并为 'ab'
。
如果命令不是文字字符串,那么使用列表来指定命令可能更方便:
#!/usr/bin/env python
import subprocess
nthreads = 2
width, height = 1920, 1080
filename = r'c:\output.avi'
subprocess.check_call([
'ffmpeg', '-f', 'dshow', '-y',
'-video_size', '%dx%d' % (width, height),
'-rtbufsize', '1404000k', '-r', '30',
'-i', 'video=HD Video 2 (TC-2000HDMI Card)',
'-threads', str(nthreads), '-vcodec', 'copy', '-ar', '48000', '-ac', '1',
'-acodec', 'pcm_s16le', '-t', '60',
filename])
注意:如果只给出了没有路径和文件扩展名的名称,则会自动附加 .exe
。这也使第二种形式更便携。
为了避免在 Windows 路径中转义反斜杠,可以使用原始字符串文字,即您可以编写 r'C:\User\...'
而不是 'C:\User\...'
。
我有一个巨大的命令 运行 具有多个参数的可执行文件。它是这样的:
ffmpeg.exe -f dshow -y -video_size 1920x1080 -rtbufsize 1404000k -r 30 -i video="HD Video 2 (TC-2000HDMI Card)" -threads 2 -vcodec copy -ar 48000 -ac 1 -acodec pcm_s16le -t 60 c:/output.avi
我为此使用 subprocess.Popen
但不确定如何使用 python 2.7
我浏览了很多帖子,其中之一是 this。我无法让它适用于多个参数。
需要这方面的帮助。
来自 subprocess.Popen
的示例显示了正确解析复杂命令行以传递给 Popen
的示例:
>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!
将它与 Python 的三重引号相结合以允许大多数引号变体会给你这样的东西(还没有 运行,抱歉命令行太长):
import shlex, subprocess
p = subprocess.Popen(slex.split("""ffmpeg.exe -f dshow -y -video_size 1920x1080 -rtbufsize 1404000k -r 30 -i video="HD Video 2 (TC-2000HDMI Card)" -threads 2 -vcodec copy -ar 48000 -ac 1 -acodec pcm_s16le -t 60 c:/output.avi"""))
.exe
建议您在 Windows 上,其中指定命令到 运行 的本机接口是一个字符串,即按原样粘贴字符串:
#!/usr/bin/env python
import subprocess
subprocess.check_call('ffmpeg.exe -f dshow -y -video_size 1920x1080 '
'-rtbufsize 1404000k -r 30 '
'-i video="HD Video 2 (TC-2000HDMI Card)" '
'-threads 2 -vcodec copy -ar 48000 -ac 1 -acodec pcm_s16le '
r'-t 60 c:\output.avi')
注意:该命令被拆分为多个文字,只是为了将其分布在多行中以便于阅读。 'a' 'b'
文字在 Python 中合并为 'ab'
。
如果命令不是文字字符串,那么使用列表来指定命令可能更方便:
#!/usr/bin/env python
import subprocess
nthreads = 2
width, height = 1920, 1080
filename = r'c:\output.avi'
subprocess.check_call([
'ffmpeg', '-f', 'dshow', '-y',
'-video_size', '%dx%d' % (width, height),
'-rtbufsize', '1404000k', '-r', '30',
'-i', 'video=HD Video 2 (TC-2000HDMI Card)',
'-threads', str(nthreads), '-vcodec', 'copy', '-ar', '48000', '-ac', '1',
'-acodec', 'pcm_s16le', '-t', '60',
filename])
注意:如果只给出了没有路径和文件扩展名的名称,则会自动附加 .exe
。这也使第二种形式更便携。
为了避免在 Windows 路径中转义反斜杠,可以使用原始字符串文字,即您可以编写 r'C:\User\...'
而不是 'C:\User\...'
。