У меня есть скрипт Python, который изменяет переменные среды в пакетном сценарии и пишет новые пакетные файлы. Пакетные файлы, в свою очередь, изменяют переменные среды в другом файле и записывают новые файлы.
В моем скрипте Python у меня есть следующий код:
TEMPLATE_PATH = "/home/eric2207/test/data_template.cmd"
def specialise_cmd(template, things_to_replace, outfile):
with open(TEMPLATE_PATH, "r") as f:
template = string.Template(f.read())
cmd = template.substitute(things_to_replace)
with open(outfile, "w") as f:
f.write(cmd)
for k in range (0, len(atomic_mass)):
replace_dict = {"i" : atomic_mass[k]}
cmd_name = "/home/eric2207/data/Z=66/data_{0}.cmd".format(atomic_mass[k])
specialise_cmd(TEMPLATE_PATH, replace_dict, cmd_name)
В data_template.cmd код:
#!/bin/sh
#PBS -q parallel
#PBS -l walltime=00:24:00
#PBS -l nodes=1:ppn=6
input="/home/eric2207/dir.dat"
output="/home/eric2207/DRHBc/dir.dat"
${i}
deformation=("-0.40" "-0.20" "0.00" "0.20" "0.40" "0.60")
cd /home/eric2207/data/Z=66
mkdir DY"${i}"
for j in "${deformation[@]}"
do
cd /home/eric2207/DRHBc
make clean
sed -e "s/\${A}/${i}/" -e "s/\${beta}/$j/" $input > $output
make
cd /home/eric2207/data/Z=66/DY"${i}"
mkdir ./"$j"
cd ./"$j"
cp /home/eric2207/DRHBc/1drhbws .
cp /home/eric2207/DRHBc/dir.dat .
cp /home/eric2207/DRHBc/paramet.for .
done
В файле dir.dat у меня есть переменные окружения $ {A} и $ {beta}.
При запуске скрипта python я получил ошибку неверного заполнителя для всех переменных в data_template.cmd, кроме i.
Traceback (most recent call last):
File "multiple.py", line 43, in <module>
specialise_cmd(TEMPLATE_PATH, replace_dict, cmd_name)
File "multiple.py", line 13, in specialise_cmd
cmd = template.substitute(things_to_replace)
File "/usr/lib64/python2.6/string.py", line 172, in substitute
return self.pattern.sub(convert, self.template)
File "/usr/lib64/python2.6/string.py", line 169, in convert
self._invalid(mo)
File "/usr/lib64/python2.6/string.py", line 146, in _invalid
(lineno, colno))
ValueError: Invalid placeholder in string: line 15, col 11
Однако мне нужны эти заполнители в data_template.cmd для изменения переменных среды в dir.dat. Мне интересно, что здесь происходит не так. Любая помощь будет принята с благодарностью!