python - 执行 Python subprocess.run 继续调用外部 MPIRUN 命令
问题描述
在使用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()
参数,你看到的只是许多迭代中的一个。我认为我面临的基本问题是我在下面描述的问题。
外部调用必须重新创建 Windows 命令终端调用:
c:\ORCA\orca my_inputfile.inp
(注意:如果我从终端执行 ORCA,我会添加> output.out
。但是,通过 python,我已将输出重定向到文件)。
变量orcaLocationStr
包含c:\ORCA\orca
. 需要 orca.exe 的绝对路径(即使它在您的 PATH 环境变量中)才能使用其多处理功能。
该变量inputFileStr
指向一个包含 ORCA 所需参数的文件。这些参数之一是进程的数量,例如nproc 16
。
一切都很顺利,直到 ORCA 崩溃。orca.exe 原来是 ORCA 主目录中其他几个 .exe 文件的包装器。使用了我之前提到的nproc
参数,因此 orca.exe 包装器可以n
使用mpirun
. 那是在 Python 中执行 orca.exe 崩溃并返回非零值时。我知道这已经执行了一些基本检查:
在 ORCA 参数文件中指定的N 个进程。调用MPIRUN。
- 该命令将使用
N
进程从 Windows 命令行执行。 - 使用 subprocess.run() 从 Python 执行时,该命令失败。
在 ORCA 参数文件中指定了1 个进程。不调用 MPIRUN 。
- 该命令将使用 1 个进程从 Windows 命令行执行。
- 该命令将使用 subprocess.run() 从 Python 执行。
我认为重要的是要清楚,不是 Python 执行 MPIRUN。它是由 Python 调用的执行 MPIRUN 的外部二进制文件。
如何通过外部嵌入的 MPIRUN 调用使 Python 进程准备好接受多个子进程?
编辑#1我希望我的软件 (a) 执行所有预处理步骤,例如执行 IO 任务等,然后 (b) 我想使用 subprocess.run() 1600 次 - 因为我有 1600 个输入文件要执行。我想知道是否所有其他方法都失败了,是否仅将这部分移至 Bash 之类的东西并独立于 Python 执行。
解决方案
推荐阅读
- node.js - 快速路线返回 200 总是带有一个空对象
- ms-word - 如何在 Web 响应中将 Word 邮件标签发送到浏览器
- javascript - 每当我在订阅功能下连接到 Mosquitto MQTT 时被授予为空
- python - 如何在基类中打印父类的实例?
- ios - 如果我从 AppStore 安装并重新安装应用程序,identifierForVendor 会发生变化吗?
- scala - Scala中的Spark数据框列操作
- javascript - 从 ES6 模块中的 IIFE 返回解构对象
- r - 在 R 中调用打印函数后,我的 S3 通用函数停止工作
- java - Oracle 数据库与 Android Studio 的连接
- docker - 有没有办法从 CI 过程中在 docker 容器中生成的图像中提取文件返回到 GITLAB 存储库