o
    f                     @   sp   d dl Z d dlZddlmZmZ ddlmZ ddlmZ ddlmZ dgZ	G dd	 d	e
ZG d
d dejZdS )    N   )	reductionset_spawning_popen)
popen_fork)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   8/usr/lib/python3.10/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 Zd ZdZeZ fddZdd Zdd Z  Z	S )r   r   c                    s   g | _ t | d S r
   )_fdssuperr   )r   process_obj	__class__r   r   r      s   zPopen.__init__c                 C   s   | j | |S r
   )r   appendr   r   r   r   duplicate_for_child"   s   zPopen.duplicate_for_childc                 C   s  ddl m} | }| j| t|j}t	 }t
|  zt|| t|| W t
d  nt
d  w d  } } }}	zut \}}t \}}	tj||d}
| j||g tt |
| j| _|| _t|	ddd}||  W d    n1 sw   Y  W g }||	fD ]}|d ur|| qt| tj|| _||fD ]}|d urt| qd S g }||	fD ]}|d ur|| qt| tj|| _||fD ]}|d urt| qw )Nr   )resource_tracker)
tracker_fdpipe_handlewbF)closefd) r   getfdr   r   r   get_preparation_data_nameioBytesIOr   r   dumpospipeget_command_lineextendr   spawnv_passfdsget_executablepidsentinelopenwrite	getbufferFinalize	close_fds	finalizerclose)r   r   r   r   	prep_datafpparent_rchild_wchild_rparent_wcmdffds_to_closer   r   r   r   _launch&   s`   




zPopen._launch)
r   r   r   methodr	   DupFdr   r   rA   __classcell__r   r   r   r   r      s    )r&   r)   contextr   r   r"   r   r   r   __all__objectr	   r   r   r   r   r   <module>   s    
