
&XTc           @   s   d  Z  d Z d d l Z d d l Z d d l m Z m Z d d l m Z d d d d  Z	 d	   Z
 d d d d
  Z d d d d  Z d d d d  Z d d  Z d S(   s   distutils.spawn

Provides the 'spawn()' function, a front-end to various platform-
specific functions for launching another program in a sub-process.
Also provides the 'find_executable()' to search the path for a given
executable name.
s   $Id$iN(   t   DistutilsPlatformErrort   DistutilsExecError(   t   logi   i    c         C   s   t  j d k r% t |  | d | nZ t  j d k rJ t |  | d | n5 t  j d k ro t |  | d | n t d t  j  d S(   s  Run another program, specified as a command list 'cmd', in a new process.

    'cmd' is just the argument list for the new process, ie.
    cmd[0] is the program to run and cmd[1:] are the rest of its arguments.
    There is no way to run a program with a name different from that of its
    executable.

    If 'search_path' is true (the default), the system's executable
    search path will be used to find the program; otherwise, cmd[0]
    must be the exact path to the executable.  If 'dry_run' is true,
    the command will not actually be run.

    Raise DistutilsExecError if running the program fails in any way; just
    return on success.
    t   posixt   dry_runt   ntt   os2s1   don't know how to spawn programs on platform '%s'N(   t   ost   namet   _spawn_posixt	   _spawn_ntt
   _spawn_os2R    (   t   cmdt   search_patht   verboseR   (    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyt   spawn   s    c         C   s>   x7 t  |   D]) \ } } d | k r d | |  | <q q W|  S(   s   Quote command-line arguments for DOS/Windows conventions.

    Just wraps every argument which contains blanks in double quotes, and
    returns a new argument list.
    t    s   "%s"(   t	   enumerate(   t   argst   it   arg(    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyt   _nt_quote_args+   s    c         C   s   |  d } t  |   }  | r1 t |  p+ | } n  t j d j | g |  d   | s y t j t j | |   } Wn. t k
 r } t	 d |  d | d f  n X| d k r t	 d |  d | f  q n  d  S(   Ni    R   i   s   command '%s' failed: %sis'   command '%s' failed with exit status %d(
   R   t   find_executableR   t   infot   joinR   t   spawnvt   P_WAITt   OSErrorR   (   R   R   R   R   t
   executablet   rct   exc(    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyR
   ;   s    
!c         C   s   |  d } | r% t  |  p | } n  t j d j | g |  d   | s y t j t j | |   } Wn. t k
 r } t d |  d | d f  n X| d k r t j	 d |  d | f  t d |  d | f  q n  d  S(   Ni    R   i   s   command '%s' failed: %sis'   command '%s' failed with exit status %d(
   R   R   R   R   R   R   R   R   R   t   debug(   R   R   R   R   R   R   R   (    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyR   O   s    
!c         C   s  t  j d j |    | r  d  S| r/ t j p5 t j } t j   } | d k r y | |  d |   WnA t k
 r } t j	 j
 d |  d | j f  t j d  n Xt j	 j
 d |  d  t j d  nxy t j | d  \ } } WnR t k
 rD} d d  l }	 | j |	 j k r&q n  t d |  d | d f  n Xt j |  rwt d |  d t j |  f  q t j |  rt j |  }
 |
 d k rd  St d	 |  d |
 f  q t j |  rq q t d
 |  d | f  q d  S(   NR   i    s   unable to execute %s: %s
i   s(   unable to execute %s for unknown reasonsis   command '%s' failed: %ss$   command '%s' terminated by signal %ds'   command '%s' failed with exit status %ds3   unknown error executing '%s': termination status %d(   R   R   R   R   t   execvpt   execvt   forkR   t   syst   stderrt   writet   strerrort   _exitt   waitpidt   errnot   EINTRR   t   WIFSIGNALEDt   WTERMSIGt	   WIFEXITEDt   WEXITSTATUSt
   WIFSTOPPED(   R   R   R   R   t   exec_fnt   pidt   et   statusR   R)   t   exit_status(    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyR	   d   sN    c         C   s   | d k r t j d } n  | j t j  } t j j |   \ } } t j d k sd t j	 d k r} | d k r} |  d }  n  t j j
 |   s x9 | D]1 } t j j | |   } t j j
 |  r | Sq Wd S|  Sd S(   s   Tries to find 'executable' in the directories listed in 'path'.

    A string listing directories separated by 'os.pathsep'; defaults to
    os.environ['PATH'].  Returns the complete filename or None if not found.
    t   PATHt   win32R   s   .exeN(   t   NoneR   t   environt   splitt   pathsept   patht   splitextR#   t   platformR   t   isfileR   (   R   R;   t   pathst   baset   extt   pt   f(    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyR      s    *(   t   __doc__t   __revision__R#   R   t   distutils.errorsR    R   t	   distutilsR   R   R   R
   R   R	   R7   R   (    (    (    s4   hd21a0b:\Efi\StdLib\lib\python.27/distutils/spawn.pyt   <module>   s   	3