从python运行终端程序

时间:2014-02-07 16:30:24

标签: python terminal

我想运行一个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)

这个工作

1 个答案:

答案 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