':param bits: list of command and args. See `subprocess` docs'

def run(self, *args):

    process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=self.working_dir, shell=False, env=self.env)
    try:
        log.info(self.log_tmpl.format(ident=basename(self.working_dir), name=self.name, args='    '.join(args)))
    except UnicodeDecodeError:
        pass
    (stdout, stderr) = process.communicate()
    try:
        log.info(self.log_tmpl.format(ident=basename(self.working_dir), name=self.name, args=stdout))
    except UnicodeDecodeError:
        pass
    return (process.returncode, stdout, stderr)
