diff --git a/oargen.py b/oargen.py new file mode 100755 index 0000000000000000000000000000000000000000..84870e2ba54e627e43086b696c6be9ece5305845 --- /dev/null +++ b/oargen.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# coding: utf-8 + +from __future__ import print_function +from __future__ import unicode_literals + +import argparse +# import logging +import subprocess + + +def argparser(): + parser = argparse.ArgumentParser() + parser.add_argument('command', nargs='?', + help="Command to use for the job (in passive mode)") + parser.add_argument('argument', nargs=argparse.REMAINDER, + help="Arguments of the command (in passive mode)") + parser.add_argument('-b', '--besteffort', action="store_true", + help="Launch job in besteffort mode") + parser.add_argument('-t', '--time', default=12, type=int, + help="Estimated maximum duration of the job (in hours)") + parser.add_argument('-g', '--gpu', action="store_true", + help="If True, reserves only cores with GPUs") + parser.add_argument('-c', '--core', default=1, type=int, + help="Number of cores to reserve") + parser.add_argument('-H', '--host', + help="Name of the host (SQL LIKE syntax accepted)") + parser.add_argument('-i', '--interactive', action="store_true", + help="Launch job in interactive mode") + parser.add_argument('-r', '--run', action="store_true", + help="Run the command") + # parser.add_argument('-l', '--logger', default='INFO', + # choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + # help="Logging level: DEBUG, INFO (default), WARNING, ERROR") + args = parser.parse_args() + + # numeric_level = getattr(logging, args.logger.upper(), None) + # if not isinstance(numeric_level, int): + # raise ValueError("Invalid log level: {}".format(args.logger)) + # logging.basicConfig(level=numeric_level) + + return args + + +def main(): + args = argparser() + + command = ["oarsub"] + properties = "-p \"" + if args.gpu: + properties += "gpu IS NOT NULL" + else: + properties += "gpu IS NULL" + if args.host is not None: + properties += " AND host LIKE '{}'".format(args.host) + properties += "\"" + command.append(properties) + + ressources = "-l core={},walltime={}:00:00".format(args.core, args.time) + command.append(ressources) + + if args.besteffort: + command.append("-t besteffort -t idempotent") + + if args.interactive: + command.append('-I') + else: + job_command = [args.command] + args.argument + command.append('"{}"'.format(" ".join(job_command))) + + print(" ".join(command)) + if args.run: + subprocess.call(command) + + +if __name__ == '__main__': + main()