我正在利用 python 运行顶级遗传算法来优化 3D 飞机机翼几何形状,以使用 OpenFOAM 实现空气动力学性能。我正在运行 Ubuntu 16.04、Python 3.6 和 OpenFOAM 5。我编写了几个位于 OpenFOAM 案例目录(包含几何 STL 文件、流体动力学参数和网格的目录)中的 shell 脚本。这些脚本执行重复的文件管理命令和 OpenFOAM 并行处理分解程序,以及生成 3D 网格和运行模拟的命令。python 脚本应该完全位于不同的目录中,因为这些案例文件夹中的数百个(如果不是数千个)将作为遗传算法的后代生成。问题是使用 os.subprocess 调用这些 shell 脚本似乎会为脚本中的每个命令生成并终止一个 shell。
#!/bin/bash
rm constant/polyMesh/*
rm constant/triSurface/*.eMesh
rm -rf 0.*
find -type d -name '*e-0*' -exec rm -r {} +
decomposePar (OpenFOAM utility)
我用以下方式调用所述脚本:
subprocess.Popen(['./shellScript'],cwd=r'./pathToDirectory')
我最终得到了错误:
./shellScript: line #: decomposePar no such file or directory
如果 shell 试图decomposePar
在 case 目录以外的目录中执行(它应该顺利运行),我可以看到这种情况发生的唯一方法。对于案例管理命令,似乎只有第一个命令有效。我已经抓取了堆栈溢出来解决这个问题,但我不确定我是否找到了一个。我尝试使用os.chdir('casePath')
、设置cwd='casePath'
和其他几个subprocess
我不太明白的参数来设置 python 脚本的工作目录!
我知道我可以将每个 shell 命令转录成 Python,但由于 shell 命令的数量以及将来可能更改这些 shell 脚本,我发现这将非常乏味。我希望我的方法是模块化的并且足够健壮,可以只运行几个我可以根据需要修改的脚本。此外,最终该程序将部署到超级计算机上。并行处理将发生在 OpenFOAM 中的 C++ 级别,而不是 python,所以这不是我关心的问题之一。有什么办法可以做到这一点,我是否错过了一些非常明显的东西?请耐心等待,因为计算机科学不是我的强项,我是一名航空工程师。谢谢!