2017-07-03 12 views
1

現在、さまざまな量子力学計算にスーパーコンピュータを使用しています。私はいつでも提出する必要があるファイルが大量にあります(280の別個の提出物)。私はこのプロセスを自動化するためにPythonを使用しようとしていますが、Pythonを使って別個のsubmissionスクリプトを実行する経験はほとんどありません。私が言われてきたものとはPythonを使用して複数のジョブをスーパーコンピュータに送信

#!/bin/bash 
string=".inp" 
root="${1%$string}" 

#if [ -z $1 ] 
#then 
# echo 'Usage: subGamess.sh <jobinput>' 
# exit 1 
#fi 

#if [ ! -f ./$root.inp ] 
#then 
# echo '<jobinput> does not look like an Orca input \(*.inp\)' 
# exit 1 
#fi 

if [ -f $root.slurm ] 
then 
    rm $root.slurm 
fi 

echo '#!/bin/bash'>>$root.slurm 
echo '#SBATCH --job-name='$root>>$root.slurm 
echo '#SBATCH --output='$root'.out'>>$root.slurm 
echo '#SBATCH --nodes=1'>>$root.slurm 
echo '#SBATCH --ntasks-per-node=12 '>>$root.slurm 
echo '#SBATCH --time=0-48:00:00 '>>$root.slurm 
echo '#SBATCH --cluster=smp'>>$root.slurm 

echo 'cd $SBATCH_O_WORKDIR'>>$root.slurm 
echo 'module purge'>>$root.slurm 
echo 'module load orca/3.0.3'>>$root.slurm 

echo 'files=('>>$root.slurm 
echo $root'.inp'>>$root.slurm 
echo ')'>>$root.slurm 
echo 'for i in ${files[@]}; do'>>$root.slurm 
echo '  sbcast $SLURM_SUBMIT_DIR/$i $SLURM_SCRATCH/$i'>>$root.slurm 
echo 'done'>>$root.slurm 

echo 'export LD_LIBRARY_PATH=/usr/lib64/openmpi- 
1.10/lib:$LD_LIBRARY_PATH'>>$root.slurm 
echo 'export PATH=/usr/lib64/openmpi-1.10/bin:$PATH'>>$root.slurm 

echo 'cd $SLURM_SCRATCH'>>$root.slurm 

echo '$(which orca) '$root'.inp'>>$root.slurm 
echo 'cp $SLURM_SCRATCH/*.{gbw,prop} $SLURM_SUBMIT_DIR'>>$root.slurm 

sbatch $root.slurm 

exit 

、私はOSをインポートする必要がありますが、私は基本的にそこから失われています:提出スクリプト私は(という名前subOrca_mpi.sh)を使用していますです。私が今までに持っている唯一のコードは次のとおりです。

import os 
import glob 
def orcasubmit(): 
    for filename in glob.glob('*.inp'): 
     #execute subOrca_mpi.sh for all input files in given folder 

orcasubmit() 

すべての入力は信じられないほど役に立ちます。

+1

https://docs.python.org/3/library/subprocess.htmlこれは必要なモジュールです。 – Rosh

+1

ありがとうございます。私はこれを見ていきます。 – celani99

答えて

1

ここには2つの選択肢があります。あなたが推測したように、最初のものはos.systemです。

for filename in glob.glob('*.inp'): 
    os.system('./' + filename) # assuming these files lie in the same directory 

また、あなたがsubprocess.Popenモジュールを使用することができ、そして私はこの1つをお勧めします:あなたはこのようにそれを行うことができます。

from subprocess import Popen 
for filename in glob.glob('*.inp'): 
    process = Popen(['/bin/bash', filename]) 
+0

'subprocess.check_output()'はおそらくOPのためには十分であり、やや理解しやすく使いやすいです。 – Anthon

+0

@Anthonコマンドが実行されるまでブロックされませんか? OPは、これがバックグラウンドでディスパッチすることを望むでしょう。これはうまくいくでしょう。 –

+0

最初のオプションを試してみて、その動作を見てみましょう。ありがとうございます – celani99

関連する問題