#!/usr/bin/env python import sys import os import re import subprocess time = '3:0:0' cpus = 4 partition = 'fast' memxcpu = '4G' ifile = str(sys.argv[1]) #Creo el directorio slurm en caso necesario wdir = 'slurm' if not os.path.isdir(wdir): os.mkdir(wdir) #esto es un contador para diferenciar los scripts que se ejecutan count = 0 precedence = 1 #abro el archivo y leo linea a linea with open(ifile, 'r') as orf: for line in orf: count+=1 order = re.search(r"(\d+):(.*)", line) # la orden se divide en un numero que marca la precedencia y la linea a ejecutar norder = int(order.group(1)) ofile = wdir+'/sorder_{:04d}'.format(count)+'.sh' cont = '#!/bin/bash\n' cont += '#SBATCH -J '+ifile+'\n' cont += '#SBATCH -c '+str(cpus)+'\n' cont += '#SBATCH --mem-per-cpu='+memxcpu+'\n' cont += '#SBATCH --time='+time+'\n' cont += '#SBATCH --mail-type=FAIL,TIME_LIMIT,STAGE_OUT\n' cont += '#SBATCH --mail-user='+os.environ.get('USER')+'\n' cont += '#SBATCH -o '+wdir+'/'+ifile+'_order-%j\n' cont += '#SBATCH -p '+partition+'\n' cont += order.group(2)+'\n' exf = open(ofile, 'w') exf.write(cont) exf.close() if norder > precedence: exthis = ['sbatch --parsable --dependency=afterok:'+str(jobid)+' '+ofile] else: exthis = ['sbatch --parsable '+ofile] jobid = int(subprocess.check_output(exthis, shell=True)) precedence = norder ofile = wdir+'/'+ifile+'_end.sh' cont = '#!/bin/bash\n' cont += '#SBATCH -J '+ifile+'\n' cont += '#SBATCH --mail-type=END\n' cont += '#SBATCH --mail-user='+os.environ.get('USER')+'\n' cont += '#SBATCH -o '+wdir+'/'+ifile+'_end-%j\n' cont += ':\n' exf = open(ofile, 'w') exf.write(cont) exf.close() os.system('sbatch --dependency=singleton '+ofile)