从python评估“带有shell变量的Shell命令行”或将python字符串作为shell命令行评估

问题描述 投票:1回答:2

上下文

我正在研究模拟集群。为了尽可能地灵活(使用不同的模拟软件),我们创建了一个python文件,该文件解析定义环境变量的配置文件,并创建了命令行以启动模拟。通过SLURM sbatch命令(shell $ COMMAND)启动此命令]

问题

[从python开始,所有环境变量都已注册以读取配置文件我在使用其他环境变量(显示为shell变量)的变量COMMAND中遇到问题]

例如

COMMAND = "fluent -3ddp -n$NUMPROCS -hosts=./hosts -file $JOBFILE"    
os.environ['COMMAND']=COMMAND    
NUMPROCS = "32"    
os.environ['NUMPROCS']=NUMPROCS    
[...]    
exe = Popen(['sbatch','template_document.sbatch'], stdout=PIPE, stderr=PIPE)

分批将COMMAND作为COMMAND作为命令行分发给所有模拟节点

COMMAND调用其他保存的环境。变量。 Shell严格将其解释为文本...这使命令行失败。严格来说,它是使用$ not变量的字符串,例如:'fluent -3ddp -n$NUMPROCS -hosts=./hosts -file $JOBFILE'

我正在寻找的解决方案

我正在寻找一个简单的解决方案解决方案1:1到3条python命令行将COMMAND评估为要回显的shell命令解决方案2:使用Shell命令将“字符串” $ COMMAND中的变量评估为变量最后,从sbatch内部启动的命令应为

fluent -3ddp -n32 -hosts=./hosts -file /path/to/JOBFILE
python bash environment-variables pass-by-reference slurm
2个回答
0
投票

似乎我对这个问题的解释不够好,但是您的第三个解决方案似乎符合我的期望……尽管到目前为止我没有设法适应它。

根据您的第三个解决方案BASH,我将使其更加简单:假设我在运行python之后得到了关注,并且无法修改]

EXPORT COMMAND='fluent -3ddp -n$NUMPROCS -hosts=./hosts -file $JOBFILE'
EXPORT JOBFILE='/path/to/jobfile'
EXPORT NUMPROCS='32'
EXPORT WHATSOEVER='SPECIFIC VARIABLE TO SIMULATION SOFTWARE'

我希望使用$ COMMAND / $ JOBFILE / $ NUMPROCS从Slurm批处理文件(bash)中执行以下操作>

fluent -3ddp -n32-hosts=./hosts -file /path/to/jobfile

[请注意:我在python中有备用解决方案-我设法用$ VARIABLE的值替换了它-根据假设$ VARIABLE不是由另一个$ variable组成的...使用正则表达式替换...只是看起来这么多行对我来说有简单的要求


0
投票

您有几种选择:

© www.soinside.com 2019 - 2024. All rights reserved.