code: def run_command(
      commands: list[str],
      args: list[str],
      cwd: str | None = None,
      verbose: bool = False,
      hide_stderr: bool = False,
      env: dict[str, str] | None = None,
  ) -> tuple[str | None, int | None]:
      """Call the given command(s)."""
      assert isinstance(commands, list)
      process = None
  
      popen_kwargs: dict[str, Any] = {}
      if sys.platform == "win32":
          # This hides the console window if pythonw.exe is used
          startupinfo = subprocess.STARTUPINFO()
          startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
          popen_kwargs["startupinfo"] = startupinfo
  
      for command in commands:
          try:
              dispcmd = str([command] + args)
              # remember shell=False, so use git.cmd on windows, not just git
              process = subprocess.Popen(
                  [command] + args,
                  cwd=cwd,
                  env=env,
                  stdout=subprocess.PIPE,
                  stderr=(subprocess.PIPE if hide_stderr else None),
                  **popen_kwargs,
              )
              break
          except OSError as e:
              if e.errno == errno.ENOENT:
                  continue
              if verbose:
                  print("unable to run %s" % dispcmd)
                  print(e)
              return None, None
      else:
          if verbose:
              print(f"unable to find command, tried {commands}")
          return None, None
      stdout = process.communicate()[0].strip().decode()
      if process.returncode != 0:
          if verbose:
              print("unable to run %s (error)" % dispcmd)
              print("stdout was %s" % stdout)
          return None, process.returncode
      return stdout, process.returncode
  
imports: from __future__ import annotations
  import errno
  import functools
  import os
  import re
  import subprocess
  import sys
  from typing import Any, Callable
label_desc: Use image node_id 4 for calling a global function with example usage: run_command(commands, args, cwd, verbose, hide_stderr, env) and returns: stdout,  process, None,  None, None,  process, None,  None