(root)/
Python-3.12.0/
Tools/
c-analyzer/
distutils/
spawn.py
       1  """distutils.spawn
       2  
       3  Provides the 'spawn()' function, a front-end to various platform-
       4  specific functions for launching another program in a sub-process.
       5  Also provides the 'find_executable()' to search the path for a given
       6  executable name.
       7  """
       8  
       9  import sys
      10  import os
      11  import os.path
      12  
      13  
      14  def find_executable(executable, path=None):
      15      """Tries to find 'executable' in the directories listed in 'path'.
      16  
      17      A string listing directories separated by 'os.pathsep'; defaults to
      18      os.environ['PATH'].  Returns the complete filename or None if not found.
      19      """
      20      _, ext = os.path.splitext(executable)
      21      if (sys.platform == 'win32') and (ext != '.exe'):
      22          executable = executable + '.exe'
      23  
      24      if os.path.isfile(executable):
      25          return executable
      26  
      27      if path is None:
      28          path = os.environ.get('PATH', None)
      29          if path is None:
      30              try:
      31                  path = os.confstr("CS_PATH")
      32              except (AttributeError, ValueError):
      33                  # os.confstr() or CS_PATH is not available
      34                  path = os.defpath
      35          # bpo-35755: Don't use os.defpath if the PATH environment variable is
      36          # set to an empty string
      37  
      38      # PATH='' doesn't match, whereas PATH=':' looks in the current directory
      39      if not path:
      40          return None
      41  
      42      paths = path.split(os.pathsep)
      43      for p in paths:
      44          f = os.path.join(p, executable)
      45          if os.path.isfile(f):
      46              # the file exists, we have a shot at spawn working
      47              return f
      48      return None