ExtensionCrawler/sge/grepper

90 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import sge_common
import sys
import getopt
import os
def get_sge_content(jobname, stdoutpath, execpath, archivepath, outpath,
greps):
return \
"""#!/bin/bash
#
#$ -t 1-256
#$ -j yes
#$ -o "{stdoutpath}"
#$ -N "{jobname}"
#
module -s load apps/python/conda 2> /dev/null
source activate mypython35
function task_id_to_letter_256 {{
ABC=abcdefghijklmnopqrstuvwxyz
let "I1 = (($1-1) / 16) % 16"
let "I2 = ($1-1) % 16"
echo ${{ABC:$I1:1}}${{ABC:$I2:1}}
}}
"{execpath}" -a "{archivepath}" -p "$(task_id_to_letter_256 $SGE_TASK_ID)" "{outpath}" {greps}
""".format(
jobname=jobname,
stdoutpath=stdoutpath,
execpath=execpath,
archivepath=archivepath,
outpath=outpath,
greps=" ".join(['"{}"'.format(gr) for gr in greps]))
def helpmsg():
print(__file__ + " ARCHIVE OUTPUT GREP1 [GREP2 ...]")
print(" -h print this help text")
def main(argv):
try:
opts, args = getopt.getopt(argv, "h")
except getopt.GetoptError:
helpmsg()
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
helpmsg()
sys.exit()
if len(args) < 3:
helpmsg()
sys.exit(2)
basedir = os.path.expanduser(args[0])
outdir = os.path.expanduser(args[1])
greps = args[2:]
stdoutpath = sge_common.get_stdout_path("grepper")
jobname = os.path.basename(stdoutpath)
execpath = os.path.join(sge_common.get_project_root(), "grepper")
sge_common.ensure_sharc()
sge_common.validate_archivepath(basedir)
sge_common.validate_execpath(execpath)
sge_common.validate_outdir(outdir)
os.makedirs(stdoutpath)
os.makedirs(outdir)
print("Using data from {}".format(basedir))
print("Writing logs to {}".format(stdoutpath))
print("Writing results to {}".format(outdir))
sge_content = get_sge_content(jobname, stdoutpath, execpath, basedir,
outdir, greps)
print("Executing the following job:")
print("=" * 80)
print(sge_content)
print("=" * 80)
sge_common.execute_sge(sge_content)
if __name__ == "__main__":
main(sys.argv[1:])