
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a„  ã                   @   s¸   d 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	 ej
Z
ejZejZG d	d
„ d
ejejƒZG dd„ dƒZddddejfdd„Zddddejdœdd„ZdS ))Úcreate_subprocess_execÚcreate_subprocess_shellé    Né   )Úevents)Ú	protocols)Ústreams)Útasks)Úloggerc                       sX   e Zd ZdZ‡ 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‡  ZS )ÚSubprocessStreamProtocolz0Like StreamReaderProtocol, but for a subprocess.c                    sH   t ƒ j|d� || _d  | _ | _| _d | _d| _g | _| j	 
¡ | _d S )N©ÚloopF)ÚsuperÚ__init__Ú_limitÚstdinÚstdoutÚstderrÚ
_transportÚ_process_exitedÚ	_pipe_fdsÚ_loopZcreate_futureÚ_stdin_closed)ÚselfÚlimitr   ©Ú	__class__© ú7/opt/alt/python38/lib64/python3.8/asyncio/subprocess.pyr      s    z!SubprocessStreamProtocol.__init__c                 C   sn   | j jg}| jd k	r&| d| j›�¡ | jd k	rB| d| j›�¡ | jd k	r^| d| j›�¡ d d |¡¡S )Nzstdin=zstdout=zstderr=z<{}>ú )r   Ú__name__r   Úappendr   r   ÚformatÚjoin)r   Úinfor   r   r   Ú__repr__   s    



z!SubprocessStreamProtocol.__repr__c                 C   s®   || _ | d¡}|d k	rDtj| j| jd�| _| j |¡ | j 	d¡ | d¡}|d k	r‚tj| j| jd�| _
| j
 |¡ | j 	d¡ | d¡}|d k	rªtj|| d | jd�| _d S )Nr   ©r   r   é   r   )ÚprotocolÚreaderr   )r   Úget_pipe_transportr   ÚStreamReaderr   r   r   Zset_transportr   r    r   ÚStreamWriterr   )r   Ú	transportZstdout_transportZstderr_transportZstdin_transportr   r   r   Úconnection_made)   s,    
ÿ
ÿ
ýz(SubprocessStreamProtocol.connection_madec                 C   s:   |dkr| j }n|dkr | j}nd }|d k	r6| |¡ d S )Nr   r&   )r   r   Z	feed_data)r   ÚfdÚdatar(   r   r   r   Úpipe_data_receivedA   s    z+SubprocessStreamProtocol.pipe_data_receivedc                 C   s¸   |dkrN| j }|d k	r| ¡  |  |¡ |d kr>| j d ¡ n| j |¡ d S |dkr^| j}n|dkrn| j}nd }|d k	r–|d krŒ| ¡  n
| |¡ || j	kr¬| j	 
|¡ |  ¡  d S )Nr   r   r&   )r   ÚcloseZconnection_lostr   Z
set_resultZset_exceptionr   r   Zfeed_eofr   ÚremoveÚ_maybe_close_transport)r   r.   ÚexcÚpiper(   r   r   r   Úpipe_connection_lostK   s*    



z-SubprocessStreamProtocol.pipe_connection_lostc                 C   s   d| _ |  ¡  d S )NT)r   r3   ©r   r   r   r   Úprocess_exitedf   s    z'SubprocessStreamProtocol.process_exitedc                 C   s(   t | jƒdkr$| jr$| j ¡  d | _d S )Nr   )Úlenr   r   r   r1   r7   r   r   r   r3   j   s    
z/SubprocessStreamProtocol._maybe_close_transportc                 C   s   || j kr| jS d S ©N)r   r   )r   Ústreamr   r   r   Ú_get_close_waitero   s    
z*SubprocessStreamProtocol._get_close_waiter)r   Ú
__module__Ú__qualname__Ú__doc__r   r$   r-   r0   r6   r8   r3   r<   Ú__classcell__r   r   r   r   r
      s   	

r
   c                   @   sj   e Z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ddd„ZdS )ÚProcessc                 C   s8   || _ || _|| _|j| _|j| _|j| _| ¡ | _d S r:   )r   Z	_protocolr   r   r   r   Zget_pidÚpid)r   r,   r'   r   r   r   r   r   u   s    zProcess.__init__c                 C   s   d| j j› d| j› d�S )Nú<r   ú>)r   r   rB   r7   r   r   r   r$   ~   s    zProcess.__repr__c                 C   s
   | j  ¡ S r:   )r   Zget_returncoder7   r   r   r   Ú
returncode�   s    zProcess.returncodec                 Ã   s   | j  ¡ I dH S )z?Wait until the process exit and return the process return code.N)r   Z_waitr7   r   r   r   Úwait…   s    zProcess.waitc                 C   s   | j  |¡ d S r:   )r   Úsend_signal)r   Úsignalr   r   r   rG   ‰   s    zProcess.send_signalc                 C   s   | j  ¡  d S r:   )r   Ú	terminater7   r   r   r   rI   Œ   s    zProcess.terminatec                 C   s   | j  ¡  d S r:   )r   Úkillr7   r   r   r   rJ   �   s    zProcess.killc              
   Ã   s˜   | j  ¡ }| j |¡ |r,t d| t|ƒ¡ z| j ¡ I d H  W n8 tt	fk
rx } z|rht d| |¡ W 5 d }~X Y nX |rŠt d| ¡ | j 
¡  d S )Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin)r   Ú	get_debugr   Úwriter	   Údebugr9   ZdrainÚBrokenPipeErrorÚConnectionResetErrorr1   )r   ÚinputrM   r4   r   r   r   Ú_feed_stdin’   s     
  ÿ zProcess._feed_stdinc                 Ã   s   d S r:   r   r7   r   r   r   Ú_noop£   s    zProcess._noopc                 Ã   s˜   | j  |¡}|dkr| j}n|dks(t‚| j}| j ¡ rV|dkrDdnd}t d| |¡ | 	¡ I d H }| j ¡ rŒ|dkrzdnd}t d| |¡ | 
¡  |S )Nr&   r   r   r   z%r communicate: read %sz%r communicate: close %s)r   r)   r   ÚAssertionErrorr   r   rK   r	   rM   Úreadr1   )r   r.   r,   r;   ÚnameÚoutputr   r   r   Ú_read_stream¦   s    

zProcess._read_streamNc                 Ã   sŽ   |d k	r|   |¡}n|  ¡ }| jd k	r2|  d¡}n|  ¡ }| jd k	rP|  d¡}n|  ¡ }tj|||| jd�I d H \}}}|  ¡ I d H  ||fS )Nr   r&   r   )	rQ   rR   r   rW   r   r   Zgatherr   rF   )r   rP   r   r   r   r   r   r   Úcommunicate·   s    


ÿzProcess.communicate)N)r   r=   r>   r   r$   ÚpropertyrE   rF   rG   rI   rJ   rQ   rR   rW   rX   r   r   r   r   rA   t   s   	
rA   c           
      ‹   sb   ˆd krt  ¡ ‰ntjdtdd� ‡ ‡fdd„}ˆj|| f|||dœ|—ŽI d H \}}	t||	ˆƒS )NúZThe loop argument is deprecated since Python 3.8 and scheduled for removal in Python 3.10.r&   ©Ú
stacklevelc                      s   t ˆ ˆd�S ©Nr%   ©r
   r   r%   r   r   Ú<lambda>Ö   s   ÿz)create_subprocess_shell.<locals>.<lambda>©r   r   r   )r   Úget_event_loopÚwarningsÚwarnÚDeprecationWarningZsubprocess_shellrA   )
Úcmdr   r   r   r   r   ÚkwdsÚprotocol_factoryr,   r'   r   r%   r   r   Ê   s$    
ýþ ýýr   )r   r   r   r   r   c                �   sf   ˆd krt  ¡ ‰ntjdtdd� ‡ ‡fdd„}ˆj|| f|ž|||dœ|—ŽI d H \}	}
t|	|
ˆƒS )NrZ   r&   r[   c                      s   t ˆ ˆd�S r]   r^   r   r%   r   r   r_   ê   s   ÿz(create_subprocess_exec.<locals>.<lambda>r`   )r   ra   rb   rc   rd   Zsubprocess_execrA   )Zprogramr   r   r   r   r   Úargsrf   rg   r,   r'   r   r%   r   r   ß   s(    
ýþþ üür   )Ú__all__Ú
subprocessrb   Ú r   r   r   r   Úlogr	   ÚPIPEZSTDOUTZDEVNULLZFlowControlMixinZSubprocessProtocolr
   rA   Z_DEFAULT_LIMITr   r   r   r   r   r   Ú<module>   s.   ÿbV ÿ
 þ