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"引数を2つに分けます"-bufsize", "4096"subprocess.callで使用する場合は、各引数を区切る必要がshell=Falseあります(デフォルト)。shell=Trueコマンド全体を1つの文字列として指定して指定することもできますが、セキュリティの脆弱性が存在する可能性があるため、これはお勧めしません。

がある場所で文字列フォーマットを使用する必要はありません"%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

ユースケースでは使用するshlex.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 に答える