2016-01-20 55 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描述的命令。等待命令完成,然后返回返回码属性“。所以它应该等待,我相信。 –