上下文
我正在研究模拟集群。为了尽可能地灵活(使用不同的模拟软件),我们创建了一个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
似乎我对这个问题的解释不够好,但是您的第三个解决方案似乎符合我的期望……尽管到目前为止我没有设法适应它。
根据您的第三个解决方案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组成的...使用正则表达式替换...只是看起来这么多行对我来说有简单的要求
您有几种选择: