Как запустить на BASH сценарий python, который принимает несколько аргументов, используя GNU параллельно? - PullRequest
2 голосов
/ 06 апреля 2019

У меня есть скрипт на Python, который я обычно выполняю из оболочки BASH, например:

pychimera $(which dockprep.py) -rec receptor1.pdb -lig ligand1.mol -cmethod gas -neut

Как видите, некоторые аргументы нуждаются в вводе (например, -rec), а другие нет (например, -neut). Я должен выполнить этот скрипт 154 раза с разными входами. Как можно запустить 8 потоков параллельно, используя параллельный скрипт GNU?

pychimera $(which dockprep.py) -rec receptor1.pdb -lig ligand1.mol -cmethod gas -neut
pychimera $(which dockprep.py) -rec receptor2.pdb -lig ligand2.mol -cmethod gas -neut
pychimera $(which dockprep.py) -rec receptor3.pdb -lig ligand3.mol -cmethod gas -neut
...

Ответы [ 2 ]

3 голосов
/ 06 апреля 2019

Я думаю, вы хотите это:

parallel 'pychimera $(which dockprep.py) -rec receptor{}.pdb -lig ligand{}.mol -cmethod gas -neut' ::: {1..154}

Если у вас не 8 процессорных ядер, а конкретно требуется 8 процессов одновременно, используйте:

parallel -j8 ...

Если вы хотите увидеть команды, которые будут выполняться без фактического запуска, используйте:

parallel --dry-run ...
1 голос
/ 06 апреля 2019

Пример commands.txt скрипт генератора:

#!/usr/bin/env bash

if [ "$#" -ne 1 ]; then
    echo "missing parameter: n"
    exit 1
fi

rm commands.txt 2> /dev/null 
dockp=$(which dockprep.py)

for((i=1;i<=$1;i++)); do
  echo "pychimera $dockp -rec receptor$i.pdb -lig ligand$i.mol -cmethod gas -neut" >> commands.txt
done

Если вы сохраните вышеуказанный bash-скрипт как cmdgen.sh, вы можете запустить его как:

bash cmdgen.sh 100

если вам нужно n, чтобы быть 100.

Для параллельного запуска команд:

$ module load parallel
$ parallel < commands.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...