2014-02-07 100 views
0

我想運行一個python程序,該程序與終端進行交互以運行另一個程序,並在繼續前等待它完成。我曾嘗試過:從python運行終端程序

os.system('intersectBed -a Mutations.bed -b Promoters.bed -wb >Mutations.in.Promoters.bed') 

subprocess.call('intersectBed -a Mutations.bed -b Promoters.bed -wb >Mutations.in.Promoters.bed', shell=True) 

既沒有按照我希望的方式運行,有沒有辦法做到這一點?

intersectBed是我希望運行的程序。如果我使用

with open('Mutations.in.Promoters.bed','w') as f: 
subprocess.call(['intersectBed','-a','Mutations.bed','-b','Promoters.bed', '-wb'], stdout=f) 

它給出了一個錯誤,即沒有這樣的文件或目錄存在。但是,如果我把這個命令放入終端,它就能完美地工作。 intersectBed位於/ bin文件夾中。這有什麼區別嗎?

編輯*

with open('Mutations.in.Promoters.bed','w') as f: 
subprocess.call(['/usr/local/bin/intersectBed','-a','Mutations.bed','-b','Promoters.bed', '-wb'], stdout=f) 

這個工作

+0

當你運行這些命令時會發生什麼?你得到什麼錯誤信息? – pseudocubic

+0

我沒有收到錯誤消息。它運行。它只是創建一個名爲Mutations.in.Promoters.bed的空白文件。這個創建的文件應該是大約2GB,而不是0KB。 – user3266890

+0

是否指定''intersectBed''的完整路徑? –

回答

1

試試這個:

with open('Mutations.in.Promoters.bed', 'w') as f: 
    subprocess.call(['intersectBed', '-a', 'Mutations.bed', '-b', 'Promoters.bed', '-wb'], stdout=f) 

參考的subprocessdocumentation,應避免使用shell=True