use*_*906 9 python subprocess command-line-arguments
例如我正在使用ffplay并希望运行此命令-bufsize[:stream_specifier] integer (output,audio,video)
目前我有这个:
subprocess.call(["ffplay", "-vn", "-nodisp","-bufsize 4096", "%s" % url])
Run Code Online (Sandbox Code Playgroud)
但这说它无效.
Abe*_*lus 15
正如JBernardo在评论中提到的那样,将"-bufsize 4096"论证分成两部分,"-bufsize", "4096".subprocess.call与shell=False(默认值)一起使用时,每个参数都需要分开.您还可以指定shell=True整个命令并将其作为单个字符串提供,但由于潜在的安全漏洞,建议不要这样做.
您不应该在任何地方使用字符串格式"%s" % url.如果url是字符串,则直接传递,否则调用str(url)以获取字符串表示.
这是要走的路:
url = 'http://www.whatever.com'
cmd = 'ffplay -vn -nodisp -bufsize 4096 '.split()
subprocess.call(cmd + [str(url)], shell=False)
Run Code Online (Sandbox Code Playgroud)
虽然使用shlex.split()对于您的用例来说是多余的,但许多评论似乎都在询问在 CLI 允许您传递包含空格的带引号的字符串(即git commit -m "Commit message here")的情况下在参数中使用空格。
这是一个快速的 python 函数,可用于运行包含带空格参数的命令:
import shlex, subprocess
def run_command( command ):
subprocess.call(shlex.split(command))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35479 次 |
| 最近记录: |