popen のオプション call で使用できます 
args, 
bufsize=0, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=False, 
shell=False, 
cwd=None, 
env=None, 
universal_newlines=False, 
startupinfo=None, 
creationflags=0
だから...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)
 その後、 myoutput でやりたいことができます 
また、このようなパイプ出力に近いこともできます。
dmesg | grep hda
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Python のマニュアル ページには、素敵で役立つ情報がたくさんあります。
 出力をファイルに書き込みたい場合は、subprocess.call の stdout-argument を使用できます。 .
- None(デフォルトでは、stdout は親 (スクリプト) から継承されます)
- subprocess.PIPE(あるコマンド/プロセスから別のコマンド/プロセスにパイプできます)
- ファイル オブジェクトまたはファイル記述子 (出力をファイルに書き込むために必要なもの)
 open のようなファイルを開く必要があります オブジェクトまたはファイル記述子の整数を call に渡します :
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)
ソケットのように有効なファイルのようなオブジェクトならどれでも機能すると思いますが (あえぎ :))、試したことはありません。
 marcog がコメントで言及しているように、stderr もリダイレクトしたい場合があります。これを stderr=subprocess.STDOUT で stdout と同じ場所にリダイレクトできます。 .上記の値のいずれも機能し、別の場所にリダイレクトできます。