view sortmerna_wrapper.py @ 0:2e7f0da431e3 draft default tip

Uploaded version 1.0
author bonsai
date Tue, 30 Apr 2013 13:12:35 -0400
parents
children
line wrap: on
line source

#!/usr/bin/env python

"""
Runs SortMeRNA
"""

import subprocess
import optparse
import shlex


def main():
    """Parse the command line, exectutes SortMeRNA and buildtrie if neeeded."""
    #TODO: Put all SortMeRNA options in the command-line parser
    parser = optparse.OptionParser()
    parser.add_option('--sortmerna', dest='sortmerna_cmd', help='')
    parser.add_option('--buildtrie', dest='buildtrie',
                      default=False, action='store_true', help='')
    (options, args) = parser.parse_args()
    if not args:
        raise Exception('Please provide at least one database')

    if options.buildtrie:
        buildtrie = 'buildtrie'
        for database in args:
            run_buildtrie([buildtrie, '--db', database])

    if options.sortmerna_cmd:
        sortmerna = 'sortmerna'
        run_sortmerna([sortmerna] +
                      shlex.split(options.sortmerna_cmd) +
                      ['-m', '262144', '-n', str(len(args)), '--db'] +
                      args)


def run_buildtrie(cmd):
    """Run the BuildTrie program."""
    try:
        stdout_arg = subprocess.PIPE
        stderr_arg = subprocess.PIPE
        child_process = subprocess.Popen(args=" ".join(cmd), shell=True,
                                         stdin=None, stdout=stdout_arg,
                                         stderr=stderr_arg)
        stdout_str, stderr_str = child_process.communicate()
        return_code = child_process.returncode
        if return_code is not 0:
            raise Exception(stderr_str)

    except Exception, error:
        raise Exception('Error while running Buildtrie:\n' +
                        '\n'.join([str(error), stdout_str, stderr_str]))


def run_sortmerna(cmd):
    """Run the SortMeRNA program."""
    try:
        stdout_arg = subprocess.PIPE
        stderr_arg = subprocess.PIPE
        child_process = subprocess.Popen(args=" ".join(cmd), shell=True,
                                         stdin=None, stdout=stdout_arg,
                                         stderr=stderr_arg)
        stdout_str, stderr_str = child_process.communicate()
        return_code = child_process.returncode
        if return_code is not 0:
            raise Exception(stderr_str)
    except Exception, error:
        raise Exception('Error while running SortMeRNA:\n' +
                        '\n'.join([str(error), stdout_str, stderr_str]))


if __name__ == "__main__":
    main()