def run(self, file_list):
        """
        Runs pylint on the list of files and return a dictionary:
         {<filename>: [list of pylint errors],
          'total': <int> - Total number of pylint messages,
          'errors': <int> - Number of pylint errors,
          'scores': (<filename>, score) - Individual score for each file.}

        :param file_list:
        :return:
        """
        data = {'total': 0,
                'errors': 0,
                'scores': []}

        for filename in file_list:
            path, fname = os.path.split(filename)
            if os.path.splitext(filename)[1] != '.py':
                #Don't run on non-python files.
                continue
            with cd_ctx(path):
                short_data = pylint_raw([fname, "--reports=n", "-f", "text"])
                full_data = pylint_raw([fname, "--reports=y", "-f", "text"])

            score_regex = re.search(r"Your code has been rated at (-?\d+\.\d+)", full_data)
            if score_regex:
                score = score_regex.groups()[0]
                data['scores'].append((filename, float(score)))

            pylint_data = short_data.splitlines()

            #Remove the module line that is at the top of each pylint
            if len(pylint_data) > 0:
                pylint_data.pop(0)
            data[filename] = pylint_data
            for line in pylint_data[:]:
                if line.startswith('E'):
                    data['errors'] += 1
                #Ignore pylint fatal errors (problem w/ pylint, not the code generally).
                if line.startswith('F'):
                    data[filename].remove(line)
            data['total'] += len(data[filename])

        if len(data['scores']) > 0:
            data['average'] = (sum([score[1] for score in data['scores']]) / len(data['scores']))
        else:
            data['average'] = 9  # Default average? Comes up when all files are new.
        print("Total: %s" % data['total'])
        print("Errors: %s" % data['errors'])
        print("Average score: %f" % data['average'])
        return data