gpt4 book ai didi

python - 从 python 脚本调用别名命令

转载 作者:行者123 更新时间:2023-11-28 19:54:54 31 4
gpt4 key购买 nike

我需要通过自动化 python 脚本运行 OpenFOAM 命令。

我的 python 代码包含这些行

subprocess.Popen(['OF23'], shell=True)
subprocess.Popen(['for i in *; do surfaceConvert $i file_path/$i.stlb; done', shell=True)

其中 OF23 是一个 shell 命令,在别名中定义为

alias OF23='export PATH=/usr/lib64/openmpi/bin/:$PATH;export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib/:$LD_LIBRARY_PATH;source /opt/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc'

此脚本在终端中运行 OpenFOAM 命令,file_path 定义了转换为二进制格式的 STL 文件

但是当我运行脚本时,我得到“OF23”未定义。

如何让我的脚本运行别名命令并执行下一个 OpenFOAM 文件转换命令

最佳答案

即使您已经解决了 alias 问题,那也是行不通的。每个 Python subprocess.Popen 都在单独的子 shell 中运行,因此执行 OF23 的效果不会持续到第二个 subprocess.Popen

这是一个简短的演示:

import subprocess

subprocess.Popen('export ATEST="Hello";echo "1 $ATEST"', shell=True)
subprocess.Popen('echo "2 $ATEST"', shell=True)

输出

1 Hello
2

因此,无论您是使用别名,还是直接执行别名命令,都需要将您的命令合并到一个 subprocess.Popen 调用中。

例如:

subprocess.Popen('''export PATH=/usr/lib64/openmpi/bin/:$PATH;
export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib/:$LD_LIBRARY_PATH;
source /opt/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc;
for i in *;
do surfaceConvert $i file_path/$i.stlb;
done''', shell=True)

我使用了一个三引号字符串,这样我就可以插入换行符,使 shell 命令更易于阅读。

显然,我无法在我的机器上测试确切的命令序列,但它应该可以工作。

关于python - 从 python 脚本调用别名命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739635/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com