code: def print_single_progress(self, output: Output):
      if self.progress_matcher:
          progress_lines: list[
              str
          ] | None = self.progress_matcher.get_best_matching_lines(
              output
          )
          if progress_lines is not None:
              first_line = True
              for index, line in enumerate(progress_lines):
                  if len(remove_ansi_colours(line)) > MAX_LINE_LENGTH:
                      # This is a bit cheating - the line will be much shorter in case it contains colors
                      # Also we need to clear color just in case color reset is removed by textwrap.shorten
                      current_line = (
                          textwrap.shorten(
                              progress_lines[index], MAX_LINE_LENGTH
                          )
                          + "\033[0;0m"
                      )
                  else:
                      current_line = progress_lines[index]
                  if current_line:
                      prefix = f"Progress: {output.title:<30}"
                      if not first_line:
                          # remove job prefix after first line
                          prefix = " " * len(prefix)
                      print(f"{prefix}{current_line}\033[0;0m")
                      first_line = False
          else:
              size = (
                  os.path.getsize(output.file_name)
                  if Path(output.file_name).exists()
                  else 0
              )
              default_output = (
                  f"File: {output.file_name} Size: {size:>10} bytes"
              )
              get_console().print(
                  f"Progress: {output.escaped_title[:30]:<30} {default_output:>161}"
              )
  
imports: from __future__ import annotations
  import datetime
  import os
  import re
  import sys
  import textwrap
  import time
  from abc import ABCMeta, abstractmethod
  from contextlib import contextmanager
  from enum import Enum
  from multiprocessing.pool import ApplyResult, Pool
  from pathlib import Path
  from tempfile import NamedTemporaryFile
  from threading import Thread
  from typing import Any, Generator, NamedTuple
  from rich.table import Table
  from airflow_breeze.utils.console import MessageType, Output, get_console
  from airflow_breeze.utils.shared_options import get_dry_run, get_forced_answer, get_verbose, set_dry_run, set_forced_answer, set_verbose
label_desc: Use image node_id 2 for calling the ParallelMonitor obj's underlying member method code with example usage: obj.print_single_progress(output) without return types