在使用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
N
进程从Windows命令行执行李>1 ORCA参数文件中指定的进程。不调用MPIRUN
我认为重要的是要清楚,这不是Python运行。它是Python调用的外部二进制文件,执行MPIRUN
如何使Python进程准备好通过外部嵌入的MPIRUN调用接受多个子进程
编辑#1我希望我的软件(a)执行所有预处理步骤,如执行IO任务等,然后(b)我想使用subprocess.run()1600次,因为我有1600个输入文件要执行。我想知道是否所有其他方法都失败了,是否只将这一部分转移到Bash之类的东西上,并独立于Python执行
目前没有回答
相关问题 更多 >
编程相关推荐