
][\{                 @   s   d  d l  Z  d  d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d g Z Gd	 d
   d
 e	  Z
 Gd d   d e j  Z d S)    N   )context)
popen_fork)	reduction)spawn)utilPopenc               @   s(   e  Z d  Z d d   Z d d   Z d S)_DupFdc             C   s   | |  _  d  S)N)fd)selfr
    r   7/usr/lib/python3.4/multiprocessing/popen_spawn_posix.py__init__   s    z_DupFd.__init__c             C   s   |  j  S)N)r
   )r   r   r   r   detach   s    z_DupFd.detachN)__name__
__module____qualname__r   r   r   r   r   r   r	      s   r	   c                   sF   e  Z d  Z d Z e Z   f d d   Z d d   Z d d   Z   S)r   r   c                s   g  |  _  t   j |  d  S)N)_fdssuperr   )r   process_obj)	__class__r   r   r      s    	zPopen.__init__c             C   s   |  j  j |  | S)N)r   append)r   r
   r   r   r   duplicate_for_child#   s    zPopen.duplicate_for_childc             C   s  d d l  m } | j   } |  j j |  t j | j  } t j	   } t
 j |   z$ t j | |  t j | |  Wd  t
 j d   Xd  } } } }	 z t j   \ } } t j   \ } }	 t j d | d |  }
 |  j j | | g  t j t j   |
 |  j  |  _ | |  _ t |	 d d d  } | j | j    Wd  QXWd  | d  k	 rzt j |  t j | f  n  x3 | | |	 f D]" } | d  k	 rt j |  qqWXd  S)Nr   )semaphore_tracker
tracker_fdZpipe_handlewbclosefdF) r   Zgetfdr   r   r   Zget_preparation_data_nameioBytesIOr   Zset_spawning_popenr   dumpospipeZget_command_lineextendr   Zspawnv_passfdsZget_executablepidsentinelopenwrite	getbufferZFinalizeclose)r   r   r   r   Z	prep_datafpZparent_rZchild_wZchild_rZparent_wcmdfr
   r   r   r   _launch'   s6    		zPopen._launch)	r   r   r   methodr	   ZDupFdr   r   r.   r   r   )r   r   r      s
   )r   r"   r   r   r   r   r   r   __all__objectr	   r   r   r   r   r   <module>   s   	
