Python的子参数(Python subprocess arguments)

2019-06-26 13:59发布

例如我使用ffplay和要运行该命令-bufsize[:stream_specifier] integer (output,audio,video)

目前,我有这样的:

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

但这说,这是无效的。

Answer 1:

作为JBernardo在评论中提到,分离"-bufsize 4096"的说法一分为二, "-bufsize", "4096" 。 每个参数需要时被分离subprocess.call与用于shell=False (缺省值)。 您还可以指定shell=True ,并给整个命令作为一个字符串,但不建议这样做,由于潜在的安全漏洞。

你不应该需要使用字符串格式化,你有"%s" % url 。 如果url是一个字符串,它直接传递,否则调用str(url)得到一个字符串表示。



Answer 2:

这是要走的路:

url = 'http://www.whatever.com'
cmd = 'ffplay -vn -nodisp -bufsize 4096 '.split()
subprocess.call(cmd + [str(url)], shell=False)


Answer 3:

虽然使用shlex.split()是矫枉过正为您的使用情况下,很多的评论似乎是询问有关情况在参数的使用空间,其中一个CLI允许您在包含空格的引号的字符串传递(即git commit -m "Commit message here" )。

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

import shlex, subprocess

def run_command( command ):
    subprocess.call(shlex.split(command))


文章来源: Python subprocess arguments