2016-01-20 76 views
1

這個問題源於我對UNIX命令和SUBPROCESS模塊的結構缺乏瞭解,所以請提前原諒我的天真。具有複雜命令的Python子進程

我有一個命令,看起來像這樣

path/to/openmpi/mpirun -machinefile machine.file -np 256 /path/to/excecutable </dev/null &> output.out & 

我知道的mpirun的結構是如何工作的,我覺得我的可執行文件將其數據寫入stdout和我重定向到一個名爲輸出。出。我已經在使用os.sys()的python腳本中使用過這個命令,但我想使用子進程,以便當可執行文件完成運行後(在後臺),python腳本可以繼續執行「事情」。

我不知道從哪裏開始,所以如果有人有任何提示或可以告訴我正確的方式來格式化子進程命令,我會非常感激。所有使用子過程的個人嘗試都會導致史詩般的失敗。

謝謝!

回答

2

這很簡單。

from subprocess import call 
call(["path/to/openmpi/mpirun", "-machinefile machine.file -np 256 /path/to/excecutable </dev/null &> output.out &"]) 

一般情況下,你會提供參數的命令列表,但我覺得應該工作一樣好。如果不是,則將每個參數分解爲列表的新元素。

This答案更多地進入了這種方法的侷限性。

+0

我認爲這是有效的,但我怎麼去讓子進程等待可執行文件完成其任務,然後再繼續其他事情?在這種情況下,子流程不會認爲它一發出命令就完成了嗎? –

+0

從Python文檔:'subprocess.call(args,*,stdin = None,stdout = None,stderr = None,shell = False)' 「運行args描述的命令。等待命令完成,然後返回返回碼屬性「。所以它應該等待,我相信。 –