
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,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rˆd | jd< z"| jf ||||||dœ|—Ž W n   |  ¡  ‚ Y nX | 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ÚpidZ_extraÚ	get_debugÚ
isinstanceÚbytesÚstrr   ÚdebugZcreate_taskÚ_connect_pipes)ÚselfÚloopÚprotocolr   r	   r
   r   r   r   ÚwaiterZextraÚkwargsZprogram©Ú	__class__© ú</opt/alt/python38/lib64/python3.8/asyncio/base_subprocess.pyr      sL    






 ÿÿ

 ÿz BaseSubprocessTransport.__init__c                 C   s  | j jg}| jr| d¡ | jd k	r6| d| j› �¡ | jd k	rT| d| j› �¡ n | jd k	rj| d¡ n
| d¡ | j d¡}|d k	rš| d|j› �¡ | j d¡}| j d	¡}|d k	rÖ||krÖ| d
|j› �¡ n6|d k	rð| d|j› �¡ |d k	�r| d|j› �¡ d 	d 
|¡¡S )NÚclosedzpid=zreturncode=Zrunningznot startedr   zstdin=r   r   zstdout=stderr=zstdout=zstderr=z<{}>ú )r-   Ú__name__r   Úappendr   r   r   ÚgetÚpipeÚformatÚjoin)r'   Úinfor
   r   r   r.   r.   r/   Ú__repr__7   s,    






z BaseSubprocessTransport.__repr__c                 K   s   t ‚d S ©N)ÚNotImplementedError)r'   r   r	   r
   r   r   r   r+   r.   r.   r/   r   T   s    zBaseSubprocessTransport._startc                 C   s
   || _ d S r:   ©r   )r'   r)   r.   r.   r/   Úset_protocolW   s    z$BaseSubprocessTransport.set_protocolc                 C   s   | j S r:   r<   ©r'   r.   r.   r/   Úget_protocolZ   s    z$BaseSubprocessTransport.get_protocolc                 C   s   | j S r:   )r   r>   r.   r.   r/   Ú
is_closing]   s    z"BaseSubprocessTransport.is_closingc                 C   s”   | j r
d S d| _ | j ¡ D ]}|d kr(q|j ¡  q| jd k	r�| jd kr�| j ¡ d kr�| j 	¡ rlt
 d| ¡ z| j ¡  W n tk
rŽ   Y nX d S )NTz$Close running child process: kill %r)r   r   Úvaluesr5   r   r   r   Zpollr   r!   r   ZwarningÚkillÚProcessLookupError)r'   Úprotor.   r.   r/   r   `   s$    
þû
zBaseSubprocessTransport.closec                 C   s&   | j s"|d| ›�t| d� |  ¡  d S )Nzunclosed transport )Úsource)r   ÚResourceWarningr   )r'   Z_warnr.   r.   r/   Ú__del__{   s    zBaseSubprocessTransport.__del__c                 C   s   | j S r:   )r   r>   r.   r.   r/   Úget_pid€   s    zBaseSubprocessTransport.get_pidc                 C   s   | j S r:   )r   r>   r.   r.   r/   Úget_returncodeƒ   s    z&BaseSubprocessTransport.get_returncodec                 C   s   || j kr| j | jS d S d S r:   )r   r5   )r'   Úfdr.   r.   r/   Úget_pipe_transport†   s    
z*BaseSubprocessTransport.get_pipe_transportc                 C   s   | j d krtƒ ‚d S r:   )r   rC   r>   r.   r.   r/   Ú_check_procŒ   s    
z#BaseSubprocessTransport._check_procc                 C   s   |   ¡  | j |¡ d S r:   )rL   r   Úsend_signal)r'   Úsignalr.   r.   r/   rM   �   s    z#BaseSubprocessTransport.send_signalc                 C   s   |   ¡  | j ¡  d S r:   )rL   r   Ú	terminater>   r.   r.   r/   rO   ”   s    z!BaseSubprocessTransport.terminatec                 C   s   |   ¡  | j ¡  d S r:   )rL   r   rB   r>   r.   r.   r/   rB   ˜   s    zBaseSubprocessTransport.killc           	   
   ƒ   sp  zðˆ j }ˆ j}|jd k	rB| ‡ fdd„|j¡I d H \}}|ˆ jd< |jd k	rv| ‡ fdd„|j¡I d H \}}|ˆ jd< |jd k	rª| ‡ fdd„|j¡I d H \}}|ˆ jd< ˆ jd k	s¸t	‚| 
ˆ jjˆ ¡ ˆ jD ]\}}|j
|f|žŽ  qÎd ˆ _W n\ ttfk
�r   ‚ Y n` tk
�rL } z"|d k	�r<| ¡ �s<| |¡ W 5 d }~X Y n X |d k	�rl| ¡ �sl| d ¡ d S )Nc                      s
   t ˆ dƒS )Nr   )ÚWriteSubprocessPipeProtor.   r>   r.   r/   Ú<lambda>£   ó    z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>r   c                      s
   t ˆ dƒS )Nr   ©ÚReadSubprocessPipeProtor.   r>   r.   r/   rQ   ©   rR   r   c                      s
   t ˆ dƒS )Nr   rS   r.   r>   r.   r/   rQ   ¯   rR   r   )r   r   r
   Zconnect_write_piper   r   Zconnect_read_piper   r   ÚAssertionErrorÚ	call_soonr   Úconnection_madeÚ
SystemExitÚKeyboardInterruptÚBaseExceptionÚ	cancelledZset_exceptionÚ
set_result)	r'   r*   Úprocr(   Ú_r5   ÚcallbackÚdataÚexcr.   r>   r/   r&   œ   sB    

þ


þ


þ

z&BaseSubprocessTransport._connect_pipesc                 G   s2   | j d k	r| j  ||f¡ n| jj|f|žŽ  d S r:   )r   r3   r   rV   )r'   Úcbr`   r.   r.   r/   Ú_callÂ   s    
zBaseSubprocessTransport._callc                 C   s   |   | jj||¡ |  ¡  d S r:   )rc   r   Zpipe_connection_lostÚ_try_finish)r'   rJ   ra   r.   r.   r/   Ú_pipe_connection_lostÈ   s    z-BaseSubprocessTransport._pipe_connection_lostc                 C   s   |   | jj||¡ d S r:   )rc   r   Zpipe_data_received)r'   rJ   r`   r.   r.   r/   Ú_pipe_data_receivedÌ   s    z+BaseSubprocessTransport._pipe_data_receivedc                 C   s”   |d k	st |ƒ‚| jd ks$t | jƒ‚| j ¡ r<t d| |¡ || _| jjd krV|| j_|  | j	j
¡ |  ¡  | jD ]}| ¡ sr| |¡ qrd | _d S )Nz%r exited with return code %r)rU   r   r   r!   r   r8   r   Ú
returncoderc   r   Zprocess_exitedrd   r   r[   r\   )r'   rg   r*   r.   r.   r/   Ú_process_exitedÏ   s    

z'BaseSubprocessTransport._process_exitedc                 Ã   s0   | j dk	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   Zcreate_futurer   r3   )r'   r*   r.   r.   r/   Ú_waitâ   s
    

zBaseSubprocessTransport._waitc                 C   sH   | j r
t‚| jd krd S tdd„ | j ¡ D ƒƒrDd| _ |  | jd ¡ d S )Nc                 s   s   | ]}|d k	o|j V  qd S r:   )Údisconnected)Ú.0Úpr.   r.   r/   Ú	<genexpr>ñ   s   ÿz6BaseSubprocessTransport._try_finish.<locals>.<genexpr>T)r   rU   r   Úallr   rA   rc   Ú_call_connection_lostr>   r.   r.   r/   rd   í   s    

ÿz#BaseSubprocessTransport._try_finishc                 C   s*   z| j |¡ W 5 d | _ d | _d | _X d S r:   )r   r   r   Úconnection_lost©r'   ra   r.   r.   r/   ro   ö   s
    z-BaseSubprocessTransport._call_connection_lost)NN)r2   Ú
__module__Ú__qualname__r   r9   r   r=   r?   r@   r   ÚwarningsÚwarnrG   rH   rI   rK   rL   rM   rO   rB   r&   rc   re   rf   rh   ri   rd   ro   Ú__classcell__r.   r.   r,   r/   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 )rP   c                 C   s   || _ || _d | _d| _d S )NF)r]   rJ   r5   rj   )r'   r]   rJ   r.   r.   r/   r     s    z!WriteSubprocessPipeProto.__init__c                 C   s
   || _ d S r:   )r5   )r'   Z	transportr.   r.   r/   rW     s    z(WriteSubprocessPipeProto.connection_madec                 C   s    d| j j› d| j› d| j›d�S )Nú<z fd=z pipe=ú>)r-   r2   rJ   r5   r>   r.   r.   r/   r9   
  s    z!WriteSubprocessPipeProto.__repr__c                 C   s    d| _ | j | j|¡ d | _d S )NT)rj   r]   re   rJ   rq   r.   r.   r/   rp     s    z(WriteSubprocessPipeProto.connection_lostc                 C   s   | j j ¡  d S r:   )r]   r   Úpause_writingr>   r.   r.   r/   ry     s    z&WriteSubprocessPipeProto.pause_writingc                 C   s   | j j ¡  d S r:   )r]   r   Úresume_writingr>   r.   r.   r/   rz     s    z'WriteSubprocessPipeProto.resume_writingN)	r2   rr   rs   r   rW   r9   rp   ry   rz   r.   r.   r.   r/   rP   ÿ   s   rP   c                   @   s   e Zd Zdd„ ZdS )rT   c                 C   s   | j  | j|¡ d S r:   )r]   rf   rJ   )r'   r`   r.   r.   r/   Údata_received  s    z%ReadSubprocessPipeProto.data_receivedN)r2   rr   rs   r{   r.   r.   r.   r/   rT     s   rT   )r   r   rt   Ú r   r   Úlogr   ZSubprocessTransportr   ZBaseProtocolrP   ZProtocolrT   r.   r.   r.   r/   Ú<module>   s    vÿ