shell=True
で使用できますsubprocess.call
ただし、これを行う(はるかに)より良い方法は次のとおりです。
command = ['program',arg1]
with open('temp.txt','w') as fout:
subprocess.call(command,stdout=fout)
これにより、全体からシェルが削除され、システムに依存しなくなり、プログラムが「シェルインジェクション」攻撃から保護されます(arg1='argument; rm -rf ~'
Windowsの同等物を考慮してください)。
コンテキスト マネージャー (with
ステートメント) は、「コンテキスト」を離れるときにファイル オブジェクトが適切にフラッシュされて閉じられることを保証するため、良い考えです。
(または同様の) クラスを使用shell=True
していない場合は、引数を文字列ではなくリストとして渡す必要があることに注意してください。subprocess.Popen
そうすれば、コードはより堅牢になります。文字列を使用したい場合、Python は、shlex.split
シェルと同じように文字列を引数に分割する便利な関数を提供します。例えば:
import subprocess
import shlex
with open('temp.txt','w') as fout:
cmd = shlex.split('command argument1 argument2 "quoted argument3"'
#cmd = ['command', 'argument1', 'argument2', 'quoted argument3']
subprocess.call(cmd,stdout=fout)