我想运行一个python代码,该代码将另一个bash代码发送到集群(slurm)。出于某种原因,bash代码无法运行,但是我一点也没有收到任何错误(我认为python发送该作业是因为我可以检索该作业的ID号)。
在脚本中,我将“ command”定义为要执行的命令。它调用另一个bash脚本“ svm_run.sh”,该脚本接收两个参数“ path / fit”和“ runname”。
import subprocess as sp
command = '/home/saarb/SVM/svm/RUNS/svm_run.sh ' + runname + ' ' + path + '/fit'
ID = sp.Popen(command, shell=True, stdout=sp.PIPE, universal_newlines=True).communicate()[0]
ID = ID.split()[-1].strip()
但是,当我在前端计算机上的python提示符(不在脚本中)中使用完全相同的行时,我根本没有问题。
这是bash代码“ svm_run.sh”:
#!/bin/bash
#
cd ..
name=$1
path=$2
job_name=${name}
output_dir=/home/saarb/SVM/svm/output/${path}
input_dir=/home/saarb/SVM/svm/data/${path}
cat > sbatch_script.${job_name}.$$ << EOF
#!/bin/bash
#
#SBATCH --job-name=${job_name}
#SBATCH --output=${output_dir}/${job_name}.sc
#SBATCH --error=${output_dir}/${job_name}.sc
#SBATCH --partition=serial
#SBATCH --ntasks=1
#SBATCH --qos=serial
date
# mpiexec ./svm.x ${path}/${name} > ${job_name}.out
mpiexec ./svm.x ${path}/${name}
echo "done!"
date
\rm sbatch_script.${job_name}.$$
EOF
sbatch sbatch_script.${job_name}.$$