a
    i3e                      @   s   d dl Z 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 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   )futures)	protocols)
transports)	coroutine)loggerc                       s   e Zd Zd/ fdd	Zdd Zdd Zdd	 Zd
d Zdd Ze	j
dkrPdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze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 )0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< | jf ||||||d| | jj| _| j| jd< | j rt|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pidZ_extra	get_debug
isinstancebytesstrr   debugZcreate_task_connect_pipes)selfloopprotocolr
   r   r   r   r   r   waiterextrakwargsprogram	__class__ J/home/pi/bot/my_env/lib/python3.9/site-packages/asyncio/base_subprocess.pyr      s@    








z BaseSubprocessTransport.__init__c                 C   s   | j jg}| jr|d |d| j  | jd urD|d| j  | jd}|d urh|d|j  | jd}| jd}|d ur||u r|d|j  n0|d ur|d	|j  |d ur|d
|j  dd	| S )Nclosedzpid=%szreturncode=%sr   zstdin=%sr   r	   zstdout=stderr=%sz	stdout=%sz	stderr=%sz<%s> )
r0   __name__r   appendr   r   r   getpipejoin)r(   infor   r   r   r1   r1   r2   __repr__5   s$    


z BaseSubprocessTransport.__repr__c                 K   s   t d S NNotImplementedError)r(   r
   r   r   r   r   r   r-   r1   r1   r2   r    M   s    zBaseSubprocessTransport._startc                 C   s   t d S r<   r=   r(   fdr1   r1   r2   !_make_write_subprocess_pipe_protoP   s    z9BaseSubprocessTransport._make_write_subprocess_pipe_protoc                 C   s   t d S r<   r=   r?   r1   r1   r2    _make_read_subprocess_pipe_protoS   s    z8BaseSubprocessTransport._make_read_subprocess_pipe_protoc                 C   s   | j r
d S d| _ | j D ]}|d u r(q|j  q| jd ur| jd u r| j r^t	
d|  z| j  W n ty~   Y n0 d S )NTz$Close running child process: kill %r)r   r   valuesr8   closer   r   r   r"   r   warningkillProcessLookupError)r(   protor1   r1   r2   rD   V   s    
zBaseSubprocessTransport.close)      c                 C   s"   | j std|  t |   d S )Nzunclosed transport %r)r   warningswarnResourceWarningrD   r(   r1   r1   r2   __del__o   s    zBaseSubprocessTransport.__del__c                 C   s   | j S r<   )r   rN   r1   r1   r2   get_pidt   s    zBaseSubprocessTransport.get_pidc                 C   s   | j S r<   )r   rN   r1   r1   r2   get_returncodew   s    z&BaseSubprocessTransport.get_returncodec                 C   s   || j v r| j | jS d S d S r<   )r   r8   r?   r1   r1   r2   get_pipe_transportz   s    
z*BaseSubprocessTransport.get_pipe_transportc                 C   s   | j d u rt d S r<   )r   rG   rN   r1   r1   r2   _check_proc   s    
z#BaseSubprocessTransport._check_procc                 C   s   |    | j| d S r<   )rS   r   send_signal)r(   signalr1   r1   r2   rT      s    z#BaseSubprocessTransport.send_signalc                 C   s   |    | j  d S r<   )rS   r   	terminaterN   r1   r1   r2   rV      s    z!BaseSubprocessTransport.terminatec                 C   s   |    | j  d S r<   )rS   r   rF   rN   r1   r1   r2   rF      s    zBaseSubprocessTransport.killc           	   
   #   sZ  z j } j}|jd urB| fdd|jE d H \}}| jd< |jd urv| fdd|jE d H \}}| jd< |jd ur| fdd|jE d H \}}| jd<  jd usJ |	 j
j   jD ]\}}|j	|g|R   qd  _W nD ty6 } z*|d ur"| s"|| W Y d }~n(d }~0 0 |d urV| sV|d  d S )Nc                      s
   t  dS )Nr   )WriteSubprocessPipeProtor1   rN   r1   r2   <lambda>       z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>r   c                      s
   t  dS )Nr   ReadSubprocessPipeProtor1   rN   r1   r2   rX      rY   r   c                      s
   t  dS )Nr	   rZ   r1   rN   r1   r2   rX      rY   r	   )r   r   r   Zconnect_write_piper   r   Zconnect_read_piper   r   	call_soonr   connection_made	Exception	cancelledZset_exception
set_result)	r(   r+   procr)   _r8   callbackdataexcr1   rN   r2   r'      s>    









 z&BaseSubprocessTransport._connect_pipesc                 G   s4   | j d ur| j ||f n| jj|g|R   d S r<   )r   r6   r   r\   )r(   cbrd   r1   r1   r2   _call   s    
zBaseSubprocessTransport._callc                 C   s   |  | jj|| |   d S r<   )rg   r   Zpipe_connection_lost_try_finish)r(   r@   re   r1   r1   r2   _pipe_connection_lost   s    z-BaseSubprocessTransport._pipe_connection_lostc                 C   s   |  | jj|| d S r<   )rg   r   Zpipe_data_received)r(   r@   rd   r1   r1   r2   _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 |   | j	D ]}|
 s^|| q^d | _	d S )Nz%r exited with return code %r)r   r   r"   r   r:   rg   r   Zprocess_exitedrh   r   r_   r`   )r(   
returncoder+   r1   r1   r2   _process_exited   s    

z'BaseSubprocessTransport._process_exitedc                 c   s4   | j dur| j S tj| jd}| j| |E dH S )zdWait until the process exit and return the process return code.

        This method is a coroutine.N)r)   )r   r   ZFuturer   r   r6   )r(   r+   r1   r1   r2   _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pr1   r1   r2   	<genexpr>   s   z6BaseSubprocessTransport._try_finish.<locals>.<genexpr>T)r   r   allr   rC   rg   _call_connection_lostrN   r1   r1   r2   rh      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(   re   r1   r1   r2   rs      s    z-BaseSubprocessTransport._call_connection_lost)NN)r5   
__module____qualname__r   r;   r    rA   rB   rD   sysversion_inforO   rP   rQ   rR   rS   rT   rV   rF   r   r'   rg   ri   rj   rl   rm   rh   rs   __classcell__r1   r1   r/   r2   r      s2    &

$	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 )rW   c                 C   s   || _ || _d | _d| _d S )NF)ra   r@   r8   rn   )r(   ra   r@   r1   r1   r2   r      s    z!WriteSubprocessPipeProto.__init__c                 C   s
   || _ d S r<   )r8   )r(   	transportr1   r1   r2   r]      s    z(WriteSubprocessPipeProto.connection_madec                 C   s   d| j j| j| jf S )Nz<%s fd=%s pipe=%r>)r0   r5   r@   r8   rN   r1   r1   r2   r;      s    z!WriteSubprocessPipeProto.__repr__c                 C   s    d| _ | j| j| d | _d S )NT)rn   ra   ri   r@   ru   r1   r1   r2   rt      s    z(WriteSubprocessPipeProto.connection_lostc                 C   s   | j j  d S r<   )ra   r   pause_writingrN   r1   r1   r2   r|     s    z&WriteSubprocessPipeProto.pause_writingc                 C   s   | j j  d S r<   )ra   r   resume_writingrN   r1   r1   r2   r}     s    z'WriteSubprocessPipeProto.resume_writingN)	r5   rv   rw   r   r]   r;   rt   r|   r}   r1   r1   r1   r2   rW      s   rW   c                   @   s   e Zd Zdd ZdS )r[   c                 C   s   | j | j| d S r<   )ra   rj   r@   )r(   rd   r1   r1   r2   data_received  s    z%ReadSubprocessPipeProto.data_receivedN)r5   rv   rw   r~   r1   r1   r1   r2   r[   
  s   r[   )r   r   rx   rK    r   r   r   Z
coroutinesr   logr   ZSubprocessTransportr   ZBaseProtocolrW   Protocolr[   r1   r1   r1   r2   <module>   s    c