2014-02-19 89 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

我試圖使用這個,但沒有任何反應... 在命令行我寫: $ python 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

您可以使用Python子模塊:

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