U e5dí ã @ 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.8/multiprocessing/popen_spawn_posix.pyÚ__init__ s z_DupFd.__init__c C s | j S r 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ƒ |¡ d S r )Ú_fdsÚsuperr )r Úprocess_obj©Ú __class__r r r s zPopen.__init__c C s | j |¡ |S r )r Úappendr r r r Úduplicate_for_child" s zPopen.duplicate_for_childc C sX ddl m} | ¡ }| j |¡ t |j¡}t ¡ }t | ƒ zt ||¡ t ||¡ W 5 t d ƒ X d } } }} z~t ¡ \}}t ¡ \}} tj||d�}| j ||g¡ t t ¡ || j¡| _|| _t| ddd��} | | ¡ ¡ W 5 Q R X W 5 g } || fD ]}|d k �r | |¡ �q t | t j| ¡| _||fD ]}|d k �r6t |¡ �q6X d S )Nr )Úresource_tracker)Ú tracker_fdZpipe_handleÚwbF)Úclosefd)Ú r Zgetfdr r r Zget_preparation_dataÚ_nameÚioÚBytesIOr r Údumpr ZFinalizeZ close_fdsÚ finalizerÚosÚcloseÚpipeZget_command_lineÚextendZspawnv_passfdsZget_executableÚpidÚsentinelÚopenÚwriteÚ getbuffer)r r r r Z prep_dataÚfpZparent_rZchild_wZchild_rZparent_wZfds_to_closer ÚcmdÚfr r r Ú_launch&