code: def which(cmd, mode=os.F_OK | os.X_OK, path=None):
      """Given a command, mode, and a PATH string, return the path which
      conforms to the given mode on the PATH, or None if there is no such
      file.
      `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
      of os.environ.get("PATH"), or can be overridden with a custom search
      path.
      Note: This function was backported from the Python 3 source code.
      """
      # Check that a given file can be accessed with the correct mode.
      # Additionally check that `file` is not a directory, as on Windows
      # directories pass the os.access check.
      try:  # Forced testing
          from shutil import which as w
  
          return w(cmd, mode, path)
      except ImportError:
  
          def _access_check(fn, mode):
              return (
                  os.path.exists(fn)
                  and os.access(fn, mode)
                  and not os.path.isdir(fn)
              )
  
          # If we're given a path with a directory part, look it up directly
          # rather than referring to PATH directories. This includes checking
          # relative to the current directory, e.g. ./script
          if os.path.dirname(cmd):
              if _access_check(cmd, mode):
                  return cmd
              return None
  
          if path is None:
              path = os.environ.get("PATH", os.defpath)
          if not path:
              return None
  
          path = path.split(os.pathsep)
  
          files = [cmd]
          seen = set()
          for dir in path:
              normdir = os.path.normcase(dir)
              if normdir not in seen:
                  seen.add(normdir)
                  for thefile in files:
                      name = os.path.join(dir, thefile)
                      if _access_check(name, mode):
                          return name
  
          return None
  
imports: import os
  import shutil
  import sys
  import tempfile
  import zlib
  import base64
  from functools import wraps
  from io import BytesIO
  from itertools import takewhile
  import re
  from metaflow.exception import MetaflowUnknownUser, MetaflowInternalError
  from typing import NamedTuple
label_desc: Use image node_id 21 for calling a global function with example usage: which(cmd, mode, path) and returns: w, None, unknown, None, None, cmd, name