def _qsub_collate_and_launch(self, output_dir, error_dir, job_names):
job_name = "<STR_LIT>" % (self.batch_name,<EOL>self.job_timestamp,<EOL>self.collate_count)<EOL>overrides = [("<STR_LIT>",error_dir), ('<STR_LIT>',job_name), ("<STR_LIT>",output_dir),<EOL>('<STR_LIT>','<STR_LIT:U+002C>'.join(job_names))]<EOL>resume_cmds =["<STR_LIT>",<EOL>("<STR_LIT>"<EOL>% self.root_directory),<EOL>"<STR_LIT>",<EOL>"<STR_LIT>"]<EOL>cmd_args = [self.command.executable,<EOL>'<STR_LIT:-c>', '<STR_LIT:;>'.join(resume_cmds)]<EOL>popen_args = self._qsub_args(overrides, cmd_args)<EOL>p = subprocess.Popen(popen_args, stdout=subprocess.PIPE)<EOL>(stdout, stderr) = p.communicate()<EOL>self.debug(stdout)<EOL>if p.poll() != <NUM_LIT:0>:<EOL><INDENT>raise EnvironmentError("<STR_LIT>" % p.poll())<EOL><DEDENT>self.collate_count += <NUM_LIT:1><EOL>self.message("<STR_LIT>")<EOL>return job_name<EOL>
The method that actually runs qsub to invoke the python
process with the necessary commands to trigger the next
collation step and next block of jobs.