3 \p ã @ sp d dl Z d dlZddlmZmZ ddlmZ ddlmZ ddlmZ dgZ G dd „ d e ƒZG d d„ dejƒZdS )é Né )Ú reductionÚset_spawning_popen)Ú popen_fork)Úspawn)ÚutilÚPopenc @ s e Zd Zdd„ Zdd„ ZdS )Ú_DupFdc C s || _ d S )N)Úfd)Úselfr © r ú9/usr/lib64/python3.6/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 s4 e Zd ZdZeZ‡ fdd„Zdd„ Zdd„ Z‡ Z S )r r c s g | _ tƒ j|ƒ d S )N)Ú_fdsÚsuperr )r Úprocess_obj)Ú __class__r r r s zPopen.__init__c C s | j j|ƒ |S )N)r Úappend)r r r r r Úduplicate_for_child" s zPopen.duplicate_for_childc C s@ ddl m} |jƒ }| jj|ƒ tj|jƒ}tj ƒ }t | ƒ ztj||ƒ tj||ƒ W d t d ƒ X d } } }} z~t jƒ \}}t jƒ \}} tj||d�} | jj||gƒ tjtjƒ | | jƒ| _|| _t| ddd��}|j|jƒ ƒ W d Q R X W d |d k �rtj| t j|fƒ x(||| fD ]}|d k �rt j|ƒ �qW X d S )Nr )Úsemaphore_tracker)Ú tracker_fdZpipe_handleÚwbF)Úclosefd)Ú r Zgetfdr r r Zget_preparation_dataÚ_nameÚioÚBytesIOr r ÚdumpÚosÚpipeZget_command_lineÚextendr Zspawnv_passfdsZget_executableÚpidÚsentinelÚopenÚwriteÚ getbufferZFinalizeÚclose) r r r r Z prep_dataÚfpZparent_rZchild_wZchild_rZparent_wÚcmdÚfr r r r Ú_launch&