3 \pã@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ Gdd „d e ƒZ Gd d„dej ƒZ dS) éNé)Ú reductionÚset_spawning_popen)Ú popen_fork)Úspawn)ÚutilÚPopenc@seZdZdd„Zdd„ZdS)Ú_DupFdcCs ||_dS)N)Úfd)Úselfr ©r ú9/usr/lib64/python3.6/multiprocessing/popen_spawn_posix.pyÚ__init__sz_DupFd.__init__cCs|jS)N)r )r r r r Údetachsz _DupFd.detachN)Ú__name__Ú __module__Ú __qualname__rrr r r r r sr cs4eZdZdZeZ‡fdd„Zdd„Zdd„Z‡Z S)rrcsg|_tƒj|ƒdS)N)Ú_fdsÚsuperr)r Ú process_obj)Ú __class__r r rszPopen.__init__cCs|jj|ƒ|S)N)rÚappend)r r r r r Úduplicate_for_child"s zPopen.duplicate_for_childc Cs@ddlm}|jƒ}|jj|ƒtj|jƒ}tj ƒ}t |ƒzt j ||ƒt j ||ƒWdt dƒXd}}}} z~t jƒ\}}t jƒ\}} tj||d�} |jj||gƒtjtjƒ| |jƒ|_||_t| ddd��} | j|jƒƒWdQRXWd|dk �rtj|t j|fƒx(||| fD]} | dk �rt j| ƒ�qWXdS)Nr)Úsemaphore_tracker)Ú tracker_fdZ pipe_handleÚwbF)Úclosefd)ÚrZgetfdrrrZget_preparation_dataÚ_nameÚioÚBytesIOrrÚdumpÚosÚpipeZget_command_lineÚextendrZspawnv_passfdsZget_executableÚpidÚsentinelÚopenÚwriteÚ getbufferZFinalizeÚclose) r rrrZ prep_dataÚfpZparent_rZchild_wZchild_rZparent_wÚcmdÚfr r r r Ú_launch&s6           z Popen._launch) rrrÚmethodr ZDupFdrrr.Ú __classcell__r r )rr rs  ) rr"ÚcontextrrrrrrÚ__all__Úobjectr rr r r r Ús