
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!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                       sT   e 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 )ÚSubprocessStreamProtocolc                    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__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   rA   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 r:   )r   Z_waitr7   r   r   r   Úwait…   s    zProcess.waitc                 C   s   | j  |¡ d S r:   )r   Úsend_signal)r   Úsignalr   r   r   rF   ‰   s    zProcess.send_signalc                 C   s   | j  ¡  d S r:   )r   Ú	terminater7   r   r   r   rH   Œ   s    zProcess.terminatec                 C   s   | j  ¡  d S r:   )r   Úkillr7   r   r   r   rI   �   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   ÚinputrL   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| j}| j ¡ rJ|dkr8dnd}t d| |¡ | ¡ I d H }| j ¡ r€|dkrndnd}t d| |¡ | 	¡  |S )Nr&   r   r   r   z%r communicate: read %sz%r communicate: close %s)
r   r)   r   r   r   rJ   r	   rL   Ú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   )	rP   rQ   r   rU   r   r   Zgatherr   rE   )r   rO   r   r   r   r   r   r   Úcommunicate·   s    


ÿzProcess.communicate)N)r   r=   r>   r   r$   ÚpropertyrD   rE   rF   rH   rI   rP   rQ   rU   rV   r   r   r   r   r@   t   s   	
r@   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_shellr@   )
Ú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 )NrX   r&   rY   c                      s   t ˆ ˆd�S r[   r\   r   r%   r   r   r]   ê   s   ÿz(create_subprocess_exec.<locals>.<lambda>r^   )r   r_   r`   ra   rb   Zsubprocess_execr@   )Zprogramr   r   r   r   r   Úargsrd   re   r,   r'   r   r%   r   r   ß   s(    
ýþþ üür   )Ú__all__Ú
subprocessr`   Ú r   r   r   r   Úlogr	   ÚPIPEZSTDOUTZDEVNULLZFlowControlMixinZSubprocessProtocolr
   r@   Z_DEFAULT_LIMITr   r   r   r   r   r   Ú<module>   s.   ÿbV ÿ
 þ