たとえば、私が使用しffplay
ていて、このコマンドを実行したい-bufsize[:stream_specifier] integer (output,audio,video)
現時点で私はこれを持っています:
subprocess.call(["ffplay", "-vn", "-nodisp","-bufsize 4096", "%s" % url])
しかし、これはそれが無効であることを示しています。
たとえば、私が使用しffplay
ていて、このコマンドを実行したい-bufsize[:stream_specifier] integer (output,audio,video)
現時点で私はこれを持っています:
subprocess.call(["ffplay", "-vn", "-nodisp","-bufsize 4096", "%s" % url])
しかし、これはそれが無効であることを示しています。
JBernardoがコメントで述べたように、"-bufsize 4096"
引数を2つに分けます"-bufsize", "4096"
。subprocess.call
で使用する場合は、各引数を区切る必要がshell=False
あります(デフォルト)。shell=True
コマンド全体を1つの文字列として指定して指定することもできますが、セキュリティの脆弱性が存在する可能性があるため、これはお勧めしません。
がある場所で文字列フォーマットを使用する必要はありません"%s" % url
。が文字列の場合url
は直接渡します。そうでない場合は、を呼び出しstr(url)
て文字列表現を取得します。
これが進むべき道です:
url = 'http://www.whatever.com'
cmd = 'ffplay -vn -nodisp -bufsize 4096 '.split()
subprocess.call(cmd + [str(url)], shell=False)
ユースケースでは使用するshlex.split()
のはやり過ぎですが、CLIでスペースを含む引用符で囲まれた文字列を渡すことができる場合(つまりgit commit -m "Commit message here"
)、パラメータでのスペースの使用について多くのコメントが尋ねられているようです。
スペースを含むパラメーターを含むコマンドを実行するために使用できる簡単なPython関数を次に示します。
import shlex, subprocess
def run_command( command ):
subprocess.call(shlex.split(command))