docs: def submit(command_filename, workingdir, send_mail = False, username = None):
      '''Submit the given command filename to the queue. Adapted from the qb3 example.'''
  
      # Open streams
      command_filename = command_filename
      outfile = command_filename + ".out"
      file_stdout = open(outfile, 'w')
  
      # Form command
      command = ['qsub']
  
      if send_mail and username:
          #username = 'Shane.OConnor@ucsf.edu'
          command.extend(['-m', 'eas', '-M', '%s@chef.compbio.ucsf.edu' % username])
      command.append(command_filename)
  
      # Submit the job and capture output.
      try:
          subp = subprocess.Popen(command, stdout=file_stdout, stderr=file_stdout, cwd=workingdir)
      except Exception, e:
          colortext.error('Failed running qsub command: %s in cwd %s.' % (command, workingdir))
          raise
  
      waitfor = 0
      errorcode = subp.wait()
      file_stdout.close()
  
      file_stdout = open(outfile, 'r')
      output = file_stdout.read().strip()
      file_stdout.close()
  
      if errorcode != 0:
          colortext.error('Failed running qsub command: %s in cwd %s.' % (command, workingdir))
          raise Exception(output)
  
      # Match job id
      # This part of the script may be error-prone as it depends on the server message.
      matches = re.match('Your job-array (\d+).(\d+)-(\d+):(\d+)', output)
      if not matches:
          matches = re.match('Your job (\d+) \(".*"\) has been submitted.*', output)
  
      if matches:
          jobid = int(matches.group(1))
      else:
          jobid = -1
  
      output = output.replace('"', "'")
      if output.startswith("qsub: ERROR"):
          raise Exception(output)
  
      os.remove(outfile)
      #os.remove(command_filename)
  
      return jobid, output