2014-02-07 3 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) 

Ошибка при создании файла или каталога. Но если я поставлю эту команду в терминал, она отлично работает. Пересекается в папке/bin. Это имеет значение?

EDIT *

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. Этот созданный файл должен составлять около 2 ГБ, а не 0 КБ. – 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) 

Ссылаясь на documentation из subprocess, использование shell=True следует избегать.

Смежные вопросы