#python #cluster-computing #slurm #cd #pwd
#python #кластерные вычисления #slurm #cd #pwd
Вопрос:
Я работаю над кластером slurm, где я выполняю несколько заданий. Мне трудно проверять задания одно за другим в каждом каталоге.
Мне удалось проверить, в каком каталоге выполняются задания, используя
scontrol show job JOB_ID
Эта команда выдает мне различные строки на выходе. Некоторые из них перечислены ниже
OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
Command=/home/astha/vt-st/scf-test/303030/49/qsub.job
WorkDir=/home/astha/vt-st/scf-test/303030/49
StdErr=/home/astha/vt-st/scf-test/303030/49/qsub.job.e1205
StdIn=/dev/null
StdOut=/home/astha/vt-st/scf-test/303030/49/qsub.job.o1205
Power=
MailUser=(null) MailType=NONE
Где WorkDir (это пример, путь будет разным для каждого задания) из приведенного выше вывода — это каталог, в который я хочу переключиться.
затем
cd /home/astha/vt-st/scf-test/303030/49
Но ввод этих длинных команд заставляет мои пальцы плакать.
Я попытался создать небольшой скрипт на Python для печати задания scontrol show
# Try block
try:
# Take a number
print("scontrol show job")
# Exception block
except (ValueError):
# Print error message
print("Enter a numeric value")
Но тогда как я должен улучшить его, чтобы он принимал заданный мной входной номер, а затем извлекал рабочий каталог из выходных данных и менял каталог.
Большое вам спасибо.
Ответ №1:
Вы не сможете легко изменить свой текущий рабочий каталог с помощью скрипта python и можете сделать это просто в Bash следующим образом:
$ cdjob() { cd $(squeue -h -o%Z -j "$1") ; }
Это создаст функцию Bash с именем cdjob
, которая принимает идентификатор задания в качестве параметра. Вы можете проверить, что он был создан правильно с помощью
$ type cdjob
cdjob is a function
cdjob ()
{
cd $(squeue -h -o%Z -j "$1")
}
После выполнения приведенной выше команды (которую вы можете поместить в свой сценарий запуска .bashrc
или .bash_profile
, если хотите, чтобы она выдерживала выходы из системы) вы сможете сделать
$ cdjob 22078365
и это приведет вас 22078365
, например, к рабочему каталогу job. Вы видите, что вместо того, чтобы пытаться проанализировать вывод scontrol
, я использую параметры форматирования вывода squeue
, чтобы просто вывести необходимую информацию.
Комментарии:
1. Спасибо, сэр, это частично сработало для меня. Он выводит путь (пример «cd / path / of / cd / directory /», но не изменяет его автоматически.
2. хм, да, извините, я оставил
echo
там для тестирования. Я обновил ответ