执行Python subprocess.run,然后调用外部MPIRUN命令

2024-05-12 23:58:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用subprocess.run()从python进行外部调用期间,我在名为ORCA的程序中遇到了一个隐藏的MPIRUN调用的小问题。我将非常感谢您的帮助

我在Windows 10上的Jupyter Notebook 6.0.3中使用Python 3.8.3。我的工作流使用以下命令执行从python到ORCA ORCA.exe程序的外部调用:

fileHandler = open(outputFileStr, "w")
result = subprocess.run([orcaLocationStr, inputFileStr], cwd=cwdStr, shell=True, stdout=fileHandler)

注意:我尝试过调整subprocess.run()参数,您看到的只是许多参数的一次迭代。我认为我面临的基本问题是我下面描述的问题

外部调用essential重新创建Windows命令终端调用:

c:\ORCA\orca my_inputfile.inp

(注意:如果我从终端执行ORCA,我会添加> output.out。但是,通过python,我将输出重定向到一个文件)

变量orcaLocationStr包含c:\ORCA\orca。orca.exe的绝对路径是使用其多处理功能所必需的(即使它位于path env变量中)

变量inputFileStr指向一个包含ORCA所需参数的文件。其中一个参数是进程数,例如nproc 16

一切都很顺利,直到虎鲸坠毁。orca.exe原来是orca homedirectory中其他几个.exe文件的包装器。使用我前面提到的nproc参数,以便orca.exe包装器可以使用mpirun执行n子进程。即在Python中执行orca.exe时崩溃并返回非零值。我知道这是因为我做了一些基本检查:

N ORCA参数文件中指定的进程调用MPIRUN

  1. 该命令将使用N进程从Windows命令行执行
  2. 使用subprocess.run()从Python执行命令时失败

1 ORCA参数文件中指定的进程。不调用MPIRUN

  1. 该命令将使用1进程从Windows命令行执行
  2. 该命令将使用subprocess.run()从Python执行

我认为重要的是要清楚,这不是Python运行。它是Python调用的外部二进制文件,执行MPIRUN

如何使Python进程准备好通过外部嵌入的MPIRUN调用接受多个子进程

编辑#1我希望我的软件(a)执行所有预处理步骤,如执行IO任务等,然后(b)我想使用subprocess.run()1600次,因为我有1600个输入文件要执行。我想知道是否所有其他方法都失败了,是否只将这一部分转移到Bash之类的东西上,并独立于Python执行


Tags: 文件run命令程序参数进程windowsexe