2014-02-19 3 views
0

Я начинающий Python, и у меня есть задача сделать. Мне нужно написать функцию, которая открывает программу (.bin), выполнить ее, чтобы я мог видеть результаты. Эта программа требует 2 аргумента из командной строки. Я использовал os.spawnv, но он не работает ...Открытие внешней программы

#!/usr/bin/python 

import sys 
import os 

def calculate_chi(): 
    if len(sys.argv)>1: 
     pdb_name=sys.argv[1] 
     dat_name=sys.argv[2] 
    crysol='/usr/bin/crysol' 
    os.spawnv(os.P_NOWAIT,crysol,[crysol,pdb_name,dat_name]) 

def main(): 
    calculate_chi() 

Помогите мне?

+0

Когда вы говорите, «не работает», что вы имеете в виду? Не могли бы вы отправить трассировку? + исправить отступы. – Bach

+0

нет следа ... что случилось с отступом? – AirelleJab

+0

yopy исправил его для вас. – Bach

ответ

0

Использовать подпроцесс. Предполагалось заменить икру.

import subprocess 

subprocess.call([crysol, pdb_name, dat_name]) 
+0

Я пытался использовать это, но ничего не происходит ... в командной строке я пишу: $ питона calculate_chi.py saxs.pdb saxs_sam_curve.dat – AirelleJab

+0

ничего не происходит? Могли бы вы объяснить? –

+0

Получаете ли вы желаемый результат при прямом запуске '/ usr/bin/crysol saxs.pdb saxs_sam_curve.dat' из терминала? –

0

В настоящее время все используют subprocess.Popen. Пример вызова вашего процесса будет

process = Popen(["/usr/bin/crysol", pdb_name, dat_name], 
       stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
1

Вы можете использовать питона подпроцесс модуля:

import subprocess 
proc = subprocess.Popen(['/usr/bin/crysol', sys.argv[1], sys.argv[2]], shell=True,  stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
while proc.poll() is None: 
    out = proc.stdout.readline() #read crystol's output from stdout and stderr 
    print out 
retunValue = proc.wait() #wait for subprocess to return and get the return value 
Смежные вопросы