如何使用 GNU parallel 在 BASH 上 运行 接受多个参数的 python 脚本?
How to run on BASH a python script that takes multiple arguments using GNU parallel?
我有一个 python 脚本,我通常从 BASH shell 像这样执行它:
pychimera $(which dockprep.py) -rec receptor1.pdb -lig ligand1.mol -cmethod gas -neut
如您所见,有些参数需要输入(例如 -rec),而其他则不需要(例如 -neut)。我必须使用不同的输入执行此脚本 154 次。如何使用 GNU 并行脚本并行 运行 8 个线程?
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
...
示例 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<=;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
我想你想要这个:
parallel 'pychimera $(which dockprep.py) -rec receptor{}.pdb -lig ligand{}.mol -cmethod gas -neut' ::: {1..154}
如果您有 8 个 CPU 核心以外的其他核心,并且特别需要一次 8 个进程,请使用:
parallel -j8 ...
如果您想查看 运行 而实际上没有 运行 任何内容的命令,请使用:
parallel --dry-run ...
我有一个 python 脚本,我通常从 BASH shell 像这样执行它:
pychimera $(which dockprep.py) -rec receptor1.pdb -lig ligand1.mol -cmethod gas -neut
如您所见,有些参数需要输入(例如 -rec),而其他则不需要(例如 -neut)。我必须使用不同的输入执行此脚本 154 次。如何使用 GNU 并行脚本并行 运行 8 个线程?
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
...
示例 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<=;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
我想你想要这个:
parallel 'pychimera $(which dockprep.py) -rec receptor{}.pdb -lig ligand{}.mol -cmethod gas -neut' ::: {1..154}
如果您有 8 个 CPU 核心以外的其他核心,并且特别需要一次 8 个进程,请使用:
parallel -j8 ...
如果您想查看 运行 而实际上没有 运行 任何内容的命令,请使用:
parallel --dry-run ...