#!/usr/bin/env python3 import os import sys import argparse import logging import re class TraceparserError(Exception): pass class Traceparser: def __init__(self, file): self.logger = logging.getLogger("Traceparser") self.file = file def run(self): current_map = None pos = (0, 0) lid = 0 for line in self.file: lid += 1 line = line.strip() if line.startswith("MAP"): current_map = line.split()[1] print(f"Current map: {current_map}") elif line.startswith("A"): m = re.match(r'A(\d+) @(\d+):(\d+) R:([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+) ([0-9a-f]+)', line) if m: new_pos = (int(m.group(2)), int(m.group(3))) if new_pos != pos: pos = new_pos print(f"{lid} POS: {pos}") def main(args): traceparser = Traceparser(args.file) traceparser.run() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--debug", "-d", action="store_true") parser.add_argument("file", type=argparse.FileType('r')) args = parser.parse_args() log_format = "%(asctime)s [%(levelname)s] %(message)s" log_date_format = "%Y-%m-%dT%H%M%S%z" log_level = logging.DEBUG if args.debug else logging.INFO logging.basicConfig(format=log_format, level=log_level, datefmt=log_date_format) try: main(args) except TraceparserError as e: logging.error(e) sys.exit(1) except KeyboardInterrupt: logging.error("Interrupted") sys.exit(2) except Exception as e: logging.error(e, exc_info=True) sys.exit(3)