16

例如我正在使用ffplay并想运行这个命令-bufsize[:stream_specifier] integer (output,audio,video)

目前我有这个:

subprocess.call(["ffplay", "-vn", "-nodisp","-bufsize 4096", "%s" % url])

但这表示它是无效的。

4

3 回答 3

23

正如 JBernardo 在评论中提到的那样,将"-bufsize 4096"论点分成两部分,"-bufsize", "4096". subprocess.callshell=False(默认)一起使用时,每个参数都需要分开。您还可以shell=True将整个命令指定为单个字符串,但由于潜在的安全漏洞,不建议这样做。

您不需要在拥有"%s" % url. 如果url是字符串,则直接传递,否则调用str(url)获取字符串表示。

于 2012-07-27T02:03:08.033 回答
5

这是要走的路:

url = 'http://www.whatever.com'
cmd = 'ffplay -vn -nodisp -bufsize 4096 '.split()
subprocess.call(cmd + [str(url)], shell=False)
于 2012-07-27T09:12:54.887 回答
2

虽然 usingshlex.split()对于您的用例来说是多余的,但许多评论似乎都在询问在 CLI 允许您传递包含空格(即git commit -m "Commit message here")的带引号的字符串的情况下在参数中使用空格。

这是一个快速的 Python 函数,可用于运行命令,包括带空格的参数:

import shlex, subprocess

def run_command( command ):
    subprocess.call(shlex.split(command))
于 2018-11-12T20:54:44.877 回答