def sh(cmd, grid=False, infile=None, outfile=None, errfile=None, background=False, threaded=None): """ simple wrapper for system calls """ if grid: from jcvi.apps.grid import GridProcess pr = GridProcess(cmd, infile=infile, outfile=outfile, errfile=errfile, threaded=threaded) pr.start(path=None) return 0 # A fake retcode else: if infile: cmd += " < {0} ".format(infile) if outfile and outfile != "stdout": cmd += " > {0} ".format(outfile) if errfile: cmd += " 2> {0} ".format(errfile) if background: cmd += " & " logging.debug(cmd) return call(cmd, shell=True)
def sh(cmd, grid=False, infile=None, outfile=None, errfile=None, append=False, background=False, threaded=None, log=True, grid_opts=None, shell="/bin/bash"): """ simple wrapper for system calls """ if not cmd: return 1 if grid: from jcvi.apps.grid import GridProcess pr = GridProcess(cmd, infile=infile, outfile=outfile, errfile=errfile, threaded=threaded, grid_opts=grid_opts) pr.start() return pr.jobid else: if infile: cat = "cat" if infile.endswith(".gz"): cat = "zcat" cmd = "{0} {1} | ".format(cat, infile) + cmd if outfile and outfile != "stdout": if outfile.endswith(".gz"): cmd += " | gzip" tag = ">" if append: tag = ">>" cmd += " {0} {1} ".format(tag, outfile) if errfile: cmd += " 2> {0} ".format(errfile) if background: cmd += " & " if log: logging.debug(cmd) return call(cmd, shell=True, executable=shell)
def sh(cmd, grid=False, infile=None, outfile=None, errfile=None, append=False, background=False, threaded=None, log=True, grid_opts=None, shell="/bin/bash"): """ simple wrapper for system calls """ if not cmd: return 1 if grid: from jcvi.apps.grid import GridProcess pr = GridProcess(cmd, infile=infile, outfile=outfile, errfile=errfile, threaded=threaded, grid_opts=grid_opts) pr.start() return pr.jobid else: if infile: cat = "cat" if infile.endswith(".gz"): cat = "zcat" cmd = "{0} {1} |".format(cat, infile) + cmd if outfile and outfile != "stdout": if outfile.endswith(".gz"): cmd += " | gzip" tag = ">" if append: tag = ">>" cmd += " {0}{1}".format(tag, outfile) if errfile: if errfile == outfile: errfile = "&1" cmd += " 2>{0}".format(errfile) if background: cmd += " &" if log: logging.debug(cmd) return call(cmd, shell=True, executable=shell)
def sh(cmd, grid=False, infile=None, outfile=None, errfile=None, background=False): """ simple wrapper for system calls """ if grid: from jcvi.apps.grid import GridProcess pr = GridProcess(cmd, infile=infile, outfile=outfile, errfile=errfile) pr.start(path=None) return 0 # A fake retcode else: if infile: cmd += " < {0} ".format(infile) if outfile and outfile != "stdout": cmd += " > {0} ".format(outfile) if errfile: cmd += " 2> {0} ".format(errfile) if background: cmd += " & " logging.debug(cmd) return call(cmd, shell=True)
def parallel(args): """ %prog parallel genome.fasta N Partition the genome into parts and run separately. This is useful if MAKER is to be run on the grid. """ from jcvi.formats.base import split p = OptionParser(parallel.__doc__) p.set_home("maker") p.set_tmpdir(tmpdir="tmp") p.set_grid_opts(array=True) opts, args = p.parse_args(args) if len(args) != 2: sys.exit(not p.print_help()) genome, NN = args threaded = opts.threaded or 1 tmpdir = opts.tmpdir mkdir(tmpdir) tmpdir = get_abs_path(tmpdir) N = int(NN) assert 1 <= N < 1000, "Required: 1 < N < 1000!" outdir = "outdir" fs = split([genome, outdir, NN]) c = CTLFile("maker_opts.ctl") c.update_abs_path() if threaded > 1: c.update_tag("cpus", threaded) cwd = os.getcwd() dirs = [] for name in fs.names: fn = get_abs_path(name) bn = op.basename(name) dirs.append(bn) c.update_tag("genome", fn) mkdir(bn) sh("cp *.ctl {0}".format(bn)) os.chdir(bn) c.write_file("maker_opts.ctl") os.chdir(cwd) jobs = "jobs" fw = open(jobs, "w") print("\n".join(dirs), file=fw) fw.close() # Submit to grid ncmds = len(dirs) runfile = "array.sh" cmd = op.join(opts.maker_home, "bin/maker") if tmpdir: cmd += " -TMP {0}".format(tmpdir) engine = get_grid_engine() contents = arraysh.format(jobs, cmd) if engine == "SGE" \ else arraysh_ua.format(N, threaded, jobs, cmd) write_file(runfile, contents) if engine == "PBS": return # qsub script outfile = "maker.\$TASK_ID.out" p = GridProcess(runfile, outfile=outfile, errfile=outfile, arr=ncmds, grid_opts=opts) qsubfile = "qsub.sh" qsub = p.build() write_file(qsubfile, qsub)