Как изменить рабочий каталог в slurum

#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 там для тестирования. Я обновил ответ