a
    ӗa"                     @   sx   d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ G dd dejZ	G dd	 d	ej
ZG d
d deejZdS )    N   )	protocols)
transports)loggerc                       s   e Zd Zd0 fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	e
jfddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Z  ZS )1BaseSubprocessTransportNc              	      s&  t  |
 d| _|| _|| _d | _d | _d | _g | _t	
 | _i | _d| _|tjkr`d | jd< |tjkrtd | jd< |tjkrd | jd< z"| jf ||||||d| W n   |    Y n0 | jj| _| j| jd< | j rt|ttfr|}n|d }td|| j | j| |	 d S )NFr   r      )argsshellstdinstdoutstderrbufsize
subprocesszprocess %r created: pid %s)super__init___closed	_protocol_loop_proc_pid_returncode_exit_waiterscollectionsdeque_pending_calls_pipes	_finishedr   PIPE_startclosepid_extra	get_debug
isinstancebytesstrr   debugcreate_task_connect_pipes)selfloopprotocolr   r	   r
   r   r   r   waiterextrakwargsprogram	__class__ :/home/manager/Python-3.9.10/Lib/asyncio/base_subprocess.pyr      sH    








z BaseSubprocessTransport.__init__c                 C   s  | j jg}| jr|d | jd ur6|d| j  | jd urT|d| j  n | jd urj|d n
|d | jd}|d ur|d|j  | jd}| jd	}|d ur||u r|d
|j  n6|d ur|d|j  |d ur|d|j  d	d
|S )Nclosedzpid=zreturncode=runningznot startedr   zstdin=r   r   zstdout=stderr=zstdout=zstderr=z<{}> )r1   __name__r   appendr   r   r   getpipeformatjoin)r)   infor
   r   r   r2   r2   r3   __repr__7   s,    






z BaseSubprocessTransport.__repr__c                 K   s   t d S N)NotImplementedError)r)   r   r	   r
   r   r   r   r.   r2   r2   r3   r   T   s    zBaseSubprocessTransport._startc                 C   s
   || _ d S r?   r   )r)   r+   r2   r2   r3   set_protocolW   s    z$BaseSubprocessTransport.set_protocolc                 C   s   | j S r?   rA   r)   r2   r2   r3   get_protocolZ   s    z$BaseSubprocessTransport.get_protocolc                 C   s   | j S r?   )r   rC   r2   r2   r3   
is_closing]   s    z"BaseSubprocessTransport.is_closingc                 C   s   | j r
d S d| _ | j D ]}|d u r(q|j  q| jd ur| jd u r| j d u r| j	 rlt
d|  z| j  W n ty   Y n0 d S )NTz$Close running child process: kill %r)r   r   valuesr:   r   r   r   pollr   r"   r   warningkillProcessLookupError)r)   protor2   r2   r3   r   `   s$    

zBaseSubprocessTransport.closec                 C   s&   | j s"|d| t| d |   d S )Nzunclosed transport )source)r   ResourceWarningr   )r)   _warnr2   r2   r3   __del__{   s    zBaseSubprocessTransport.__del__c                 C   s   | j S r?   )r   rC   r2   r2   r3   get_pid   s    zBaseSubprocessTransport.get_pidc                 C   s   | j S r?   )r   rC   r2   r2   r3   get_returncode   s    z&BaseSubprocessTransport.get_returncodec                 C   s   || j v r| j | jS d S d S r?   )r   r:   )r)   fdr2   r2   r3   get_pipe_transport   s    
z*BaseSubprocessTransport.get_pipe_transportc                 C   s   | j d u rt d S r?   )r   rJ   rC   r2   r2   r3   _check_proc   s    
z#BaseSubprocessTransport._check_procc                 C   s   |    | j| d S r?   )rT   r   send_signal)r)   signalr2   r2   r3   rU      s    z#BaseSubprocessTransport.send_signalc                 C   s   |    | j  d S r?   )rT   r   	terminaterC   r2   r2   r3   rW      s    z!BaseSubprocessTransport.terminatec                 C   s   |    | j  d S r?   )rT   r   rI   rC   r2   r2   r3   rI      s    zBaseSubprocessTransport.killc           	   
      sr  z j } j}|jd urB| fdd|jI d H \}}| jd< |jd urv| fdd|jI d H \}}| jd< |jd ur| fdd|jI d H \}}| jd<  jd usJ |	 j
j   jD ]\}}|j	|g|R   qd  _W n\ ttfy    Y nb tyN } z*|d ur:| s:|| W Y d }~n(d }~0 0 |d urn| sn|d  d S )Nc                      s
   t  dS )Nr   )WriteSubprocessPipeProtor2   rC   r2   r3   <lambda>       z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>r   c                      s
   t  dS )Nr   ReadSubprocessPipeProtor2   rC   r2   r3   rY      rZ   r   c                      s
   t  dS )Nr   r[   r2   rC   r2   r3   rY      rZ   r   )r   r   r
   connect_write_piper   r   connect_read_piper   r   	call_soonr   connection_made
SystemExitKeyboardInterruptBaseException	cancelledset_exception
set_result)	r)   r,   procr*   _r:   callbackdataexcr2   rC   r3   r(      sB    









 z&BaseSubprocessTransport._connect_pipesc                 G   s4   | j d ur| j ||f n| jj|g|R   d S r?   )r   r8   r   r_   )r)   cbrj   r2   r2   r3   _call   s    
zBaseSubprocessTransport._callc                 C   s   |  | jj|| |   d S r?   )rm   r   pipe_connection_lost_try_finish)r)   rR   rk   r2   r2   r3   _pipe_connection_lost   s    z-BaseSubprocessTransport._pipe_connection_lostc                 C   s   |  | jj|| d S r?   )rm   r   pipe_data_received)r)   rR   rj   r2   r2   r3   _pipe_data_received   s    z+BaseSubprocessTransport._pipe_data_receivedc                 C   s   |d usJ || j d u s$J | j | j r<td| | || _ | jjd u rV|| j_| | jj	 | 
  | jD ]}| sr|| qrd | _d S )Nz%r exited with return code %r)r   r   r"   r   r=   r   
returncoderm   r   process_exitedro   r   rd   rf   )r)   rs   r,   r2   r2   r3   _process_exited   s    

z'BaseSubprocessTransport._process_exitedc                    s0   | j dur| j S | j }| j| |I dH S )zdWait until the process exit and return the process return code.

        This method is a coroutine.N)r   r   create_futurer   r8   )r)   r,   r2   r2   r3   _wait   s
    

zBaseSubprocessTransport._waitc                 C   sH   | j r
J | jd u rd S tdd | j D rDd| _ | | jd  d S )Nc                 s   s   | ]}|d uo|j V  qd S r?   )disconnected).0pr2   r2   r3   	<genexpr>   s   z6BaseSubprocessTransport._try_finish.<locals>.<genexpr>T)r   r   allr   rF   rm   _call_connection_lostrC   r2   r2   r3   ro      s    

z#BaseSubprocessTransport._try_finishc                 C   s<   z"| j | W d | _d | _d | _ nd | _d | _d | _ 0 d S r?   )r   connection_lostr   r   r)   rk   r2   r2   r3   r}      s    z-BaseSubprocessTransport._call_connection_lost)NN)r7   
__module____qualname__r   r>   r   rB   rD   rE   r   warningswarnrO   rP   rQ   rS   rT   rU   rW   rI   r(   rm   rp   rr   ru   rw   ro   r}   __classcell__r2   r2   r0   r3   r   
   s0    +&	r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )rX   c                 C   s   || _ || _d | _d| _d S )NF)rg   rR   r:   rx   )r)   rg   rR   r2   r2   r3   r     s    z!WriteSubprocessPipeProto.__init__c                 C   s
   || _ d S r?   )r:   )r)   	transportr2   r2   r3   r`     s    z(WriteSubprocessPipeProto.connection_madec                 C   s    d| j j d| j d| jdS )N<z fd=z pipe=>)r1   r7   rR   r:   rC   r2   r2   r3   r>   
  s    z!WriteSubprocessPipeProto.__repr__c                 C   s    d| _ | j| j| d | _d S )NT)rx   rg   rp   rR   r   r2   r2   r3   r~     s    z(WriteSubprocessPipeProto.connection_lostc                 C   s   | j j  d S r?   )rg   r   pause_writingrC   r2   r2   r3   r     s    z&WriteSubprocessPipeProto.pause_writingc                 C   s   | j j  d S r?   )rg   r   resume_writingrC   r2   r2   r3   r     s    z'WriteSubprocessPipeProto.resume_writingN)	r7   r   r   r   r`   r>   r~   r   r   r2   r2   r2   r3   rX      s   rX   c                   @   s   e Zd Zdd ZdS )r\   c                 C   s   | j | j| d S r?   )rg   rr   rR   )r)   rj   r2   r2   r3   data_received  s    z%ReadSubprocessPipeProto.data_receivedN)r7   r   r   r   r2   r2   r2   r3   r\     s   r\   )r   r   r    r   r   logr   SubprocessTransportr   BaseProtocolrX   Protocolr\   r2   r2   r2   r3   <module>   s    v