2013-12-11 16 views
0

當我運行命令子過程調用提供了不正確的參數相比,「」。加入()

subprocess.call(['intersectBed','-u','-a',out_snv_filter,'-b',cds,'>',out_cds],shell=True) 

我得到彙報的解釋爲intersectBed的幫助菜單。

但是當我運行

>>> ' '.join(['intersectBed','-u','-a',out_snv_filter,'-b',cds,'>',out_cds]) 
'intersectBed -u -a test/test.out.snv.filter -b gencode7.cds.bed > test/test.out.cds' 

$ intersectBed -u -a test/test.out.snv.filter -b gencode7.cds.bed > test/test.out.cds 

程序正常運行。這裏有什麼不同?

+0

drop'shell = True' – jfs

+0

如果我刪除shell = True,那麼'>'stdout管道將不起作用。 –

+0

使用list參數和'shell = True'是不正確的(含義不同:第一項是shell命令,其餘的是shell的參數,我不認爲這是你想要的) – jfs

回答

2
from subprocess import check_call 

args = ['intersectBed','-u','-a',out_snv_filter,'-b',cds] 
with open(out_cds, 'wb') as outfile: 
    check_call(args, stdout=outfile) 
相關問題