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)