如何在BASH上运行一个使用GNU并行获取多个参数的python脚本?

问题描述 投票:2回答:2

我有一个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
...
bash gnu-parallel multiple-arguments
2个回答
1
投票

示例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

3
投票

我想你想要这个:

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

如果您有8个以上的CPU内核,并且一次只需要8个进程,请使用:

parallel -j8 ...

如果要查看在没有实际运行任何内容的情况下运行的命令,请使用:

parallel --dry-run ...
© www.soinside.com 2019 - 2024. All rights reserved.