code: def run(self):
      if os.path.isfile(self.__executable):
          result = subprocess.run(
              self.__executable,
              stdout=subprocess.PIPE,
              stderr=subprocess.STDOUT,
          )
  
          output = result.stdout.decode("utf-8")
          print(output)
  
          exit_code = result.returncode
          if exit_code == EExitCode.success:
              exit(exit_code)
          elif exit_code == -signal.SIGSEGV:
              logging.error(
                  "Segmentation fault signal is received during unit-testing process."
              )
              exit(exit_code)
  
          for _ in range(self.__attempts):
              exit_code, output = self.__rerun(output)
              if exit_code == EExitCode.success:
                  exit(exit_code)
              elif exit_code == EExitCode.failure_tests_not_found:
                  logging.error(
                      "There is nothing to rerun - failure tests are not found despite failure code '"
                      + str(result.returncode)
                      + "'."
                  )
                  exit(exit_code)
      else:
          logging.error(
              "Impossible to find executable file '%s'."
              % self.__executable
          )
          exit(EExitCode.executable_not_found)
  
file_path: pyclustering/ccore/tst/ut-runner.py
imports: import argparse
  import enum
  import logging
  import os.path
  import re
  import signal
  import subprocess
label_desc: Use image node_id 2 for calling the Runner obj's underlying member method code with example usage: obj.run() without return types