def after_execution(self, exitcode, forceTimeout=False, termination_reason=None):
        # termination reason is not fully precise for timeouts, so we guess "timeouts"
        # if time is too high
        isTimeout = forceTimeout \
                or termination_reason in ['cputime', 'cputime-soft', 'walltime'] \
                or self._is_timeout()

        if isinstance(exitcode, int):
            exitcode = util.ProcessExitCode.from_raw(exitcode)

        # read output
        try:
            with open(self.log_file, 'rt', errors='ignore') as outputFile:
                output = outputFile.readlines()
                # first 6 lines are for logging, rest is output of subprocess, see runexecutor.py for details
                output = output[6:]
        except IOError as e:
            logging.warning("Cannot read log file: %s", e.strerror)
            output = []

        self.status = self._analyse_result(exitcode, output, isTimeout, termination_reason)
        self.category = result.get_result_category(self.identifier, self.status, self.properties)

        for column in self.columns:
            substitutedColumnText = substitute_vars([column.text], self.runSet, self.sourcefiles[0])[0]
            column.value = self.runSet.benchmark.tool.get_value_from_output(output, substitutedColumnText)
@deprecated: use set_result() instead
dataset/ETHPy150Open sosy-lab/benchexec/benchexec/model.py/Run.after_execution