这个问题源于我对 UNIX 命令结构和 SUBPROCESS 模块缺乏了解,所以请提前原谅我的天真。
我有一个命令,看起来像这样
path/to/openmpi/mpirun -machinefile machine.file -np 256 /path/to/excecutable </dev/null &> output.out &
我知道 MPIrun 的结构如何工作,并且我认为我的可执行文件将其数据写入 stdout,然后将其重定向到名为 output.out 的文件。我已经在使用 os.sys() 的 python 脚本中使用了此命令,但我想使用子进程,以便当可执行文件完成运行(在后台)时,python 脚本可以恢复执行“操作”。
我不知道从哪里开始,所以如果有人有任何提示或可以向我展示格式化子进程命令的正确方法,我将非常感激。所有使用子流程的个人尝试都会导致巨大的失败。
谢谢!!!
最佳答案
这非常简单。
from subprocess import call
call(["path/to/openmpi/mpirun", "-machinefile machine.file -np 256 /path/to/excecutable </dev/null &> output.out &"])
通常,您会以列表的形式向命令提供参数,但我认为这应该同样有效。如果不是,请将每个参数分解为列表的一个新元素。
This答案更多地探讨了这种方法的局限性。
关于具有复杂命令的 Python 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34905954/