我想运行一个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 :(得分:1)
试试这个:
with open('Mutations.in.Promoters.bed', 'w') as f:
subprocess.call(['intersectBed', '-a', 'Mutations.bed', '-b', 'Promoters.bed', '-wb'], stdout=f)
参考subprocess
的{{3}},应避免使用shell=True
。