o
    DXîh‹"  ã                   @   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r0d | jd< |tjkr:d | jd< |tjkrDd | jd< z| jd||||||dœ|¤Ž W n   |  ¡  ‚ | jj| _| j| jd< | j ¡ r„t|ttfƒrx|}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   ÚwaiterÚextraÚkwargsZprogram©Ú	__class__r   úA/opt/python-3.10.19/usr/lib/python3.10/asyncio/base_subprocess.pyr      sH   






ÿ
ÿ

ÿz BaseSubprocessTransport.__init__c                 C   s  | j jg}| jr| d¡ | jd ur| d| j› ¡ | jd ur*| d| j› ¡ n| jd ur5| d¡ n| d¡ | j d¡}|d urM| d|j› ¡ | j d¡}| j d	¡}|d urk||u rk| d
|j› ¡ n|d urx| 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<{}>ú )r/   Ú__name__r   Úappendr   r   r   ÚgetÚpipeÚformatÚjoin)r(   Úinfor
   r   r   r   r   r0   Ú__repr__7   s,   





z BaseSubprocessTransport.__repr__c                 K   s   t ‚©N)ÚNotImplementedError)r(   r   r	   r
   r   r   r   r-   r   r   r0   r   T   s   zBaseSubprocessTransport._startc                 C   ó
   || _ d S r<   ©r   )r(   r*   r   r   r0   Úset_protocolW   ó   
z$BaseSubprocessTransport.set_protocolc                 C   ó   | j S r<   r?   ©r(   r   r   r0   Úget_protocolZ   ó   z$BaseSubprocessTransport.get_protocolc                 C   rB   r<   )r   rC   r   r   r0   Ú
is_closing]   rE   z"BaseSubprocessTransport.is_closingc                 C   sž   | j rd S d| _ | j ¡ D ]}|d u rq|j ¡  q| jd urI| jd u rK| j ¡ d u rM| j 	¡ r6t
 d| ¡ z| j ¡  W d S  tyH   Y d S w d S d S d S )NTz$Close running child process: kill %r)r   r   Úvaluesr7   r    r   r   Úpollr   r"   r   ÚwarningÚkillÚProcessLookupError)r(   Úprotor   r   r0   r    `   s(   


ÿôzBaseSubprocessTransport.closec                 C   s*   | j s|d| ›t| d |  ¡  d S d S )Nzunclosed transport )Úsource)r   ÚResourceWarningr    )r(   Ú_warnr   r   r0   Ú__del__{   s   þzBaseSubprocessTransport.__del__c                 C   rB   r<   )r   rC   r   r   r0   Úget_pid€   rE   zBaseSubprocessTransport.get_pidc                 C   rB   r<   )r   rC   r   r   r0   Úget_returncodeƒ   rE   z&BaseSubprocessTransport.get_returncodec                 C   s   || j v r| j | jS d S r<   )r   r7   )r(   Úfdr   r   r0   Úget_pipe_transport†   s   
z*BaseSubprocessTransport.get_pipe_transportc                 C   s   | j d u rtƒ ‚d S r<   )r   rK   rC   r   r   r0   Ú_check_procŒ   s   
ÿz#BaseSubprocessTransport._check_procc                 C   s   |   ¡  | j |¡ d S r<   )rU   r   Úsend_signal)r(   Úsignalr   r   r0   rV      s   z#BaseSubprocessTransport.send_signalc                 C   ó   |   ¡  | j ¡  d S r<   )rU   r   Ú	terminaterC   r   r   r0   rY   ”   ó   z!BaseSubprocessTransport.terminatec                 C   rX   r<   )rU   r   rJ   rC   r   r   r0   rJ   ˜   rZ   zBaseSubprocessTransport.killc           	   
   ƒ   s|  zrˆ j }ˆ j}|jd ur"| ‡ 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rV| ‡ fdd„|j¡I d H \}}|ˆ jd< | ˆ j	j
ˆ ¡ ˆ jD ]\}}|j|g|¢R Ž  qad ˆ _W n7 ttfy}   ‚  tyª } z"|d ur˜| ¡ sŸ| |¡ W Y d }~d S W Y d }~d S W Y d }~d S d }~ww |d urº| ¡ s¼| d ¡ d S d S d S )Nc                      ó
   t ˆ dƒS )Nr   )ÚWriteSubprocessPipeProtor   rC   r   r0   Ú<lambda>£   ó   
 z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>r   c                      r[   )Nr   ©ÚReadSubprocessPipeProtor   rC   r   r0   r]   ©   r^   r   c                      r[   )Nr   r_   r   rC   r   r0   r]   ¯   r^   r   )r   r   r
   Zconnect_write_piper   r   Zconnect_read_piper   Ú	call_soonr   Úconnection_mader   Ú
SystemExitÚKeyboardInterruptÚBaseExceptionÚ	cancelledÚset_exceptionÚ
set_result)	r(   r+   Úprocr)   Ú_r7   ÚcallbackÚdataÚexcr   rC   r0   r'   œ   sJ   €

þ


þ


þ

ÿ€ÿÿz&BaseSubprocessTransport._connect_pipesc                 G   s6   | j d ur| j  ||f¡ d S | jj|g|¢R Ž  d S r<   )r   r5   r   ra   )r(   Úcbrl   r   r   r0   Ú_callÂ   s   
zBaseSubprocessTransport._callc                 C   s   |   | jj||¡ |  ¡  d S r<   )ro   r   Zpipe_connection_lostÚ_try_finish)r(   rS   rm   r   r   r0   Ú_pipe_connection_lostÈ   s   z-BaseSubprocessTransport._pipe_connection_lostc                 C   s   |   | jj||¡ d S r<   )ro   r   Zpipe_data_received)r(   rS   rl   r   r   r0   Ú_pipe_data_receivedÌ   s   z+BaseSubprocessTransport._pipe_data_receivedc                 C   sp   | j  ¡ rt d| |¡ || _| jjd u r|| j_|  | jj	¡ |  
¡  | jD ]}| ¡ s2| |¡ q'd | _d S )Nz%r exited with return code %r)r   r"   r   r:   r   r   Ú
returncodero   r   Zprocess_exitedrp   r   rf   rh   )r(   rs   r+   r   r   r0   Ú_process_exitedÏ   s   


€
z'BaseSubprocessTransport._process_exitedc                 Ã   s4   	 | j d ur
| j S | j ¡ }| j |¡ |I d H S r<   )r   r   Zcreate_futurer   r5   )r(   r+   r   r   r0   Ú_waitâ   s   €


zBaseSubprocessTransport._waitc                 C   sB   | j d u rd S tdd„ | j ¡ D ƒƒrd| _|  | jd ¡ d S d S )Nc                 s   s    | ]
}|d uo
|j V  qd S r<   )Údisconnected)Ú.0Úpr   r   r0   Ú	<genexpr>ñ   s   € ÿz6BaseSubprocessTransport._try_finish.<locals>.<genexpr>T)r   Úallr   rG   r   ro   Ú_call_connection_lostrC   r   r   r0   rp   í   s   
ÿýz#BaseSubprocessTransport._try_finishc                 C   s:   z| j  |¡ W d | _d | _d | _ d S d | _d | _d | _ w r<   )r   Úconnection_lostr   r   ©r(   rm   r   r   r0   r{   ö   s   
þz-BaseSubprocessTransport._call_connection_lost)NN)r4   Ú
__module__Ú__qualname__r   r;   r   r@   rD   rF   r    ÚwarningsÚwarnrP   rQ   rR   rT   rU   rV   rY   rJ   r'   ro   rq   rr   rt   ru   rp   r{   Ú__classcell__r   r   r.   r0   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 )r\   c                 C   s   || _ || _d | _d| _d S )NF)ri   rS   r7   rv   )r(   ri   rS   r   r   r0   r     s   
z!WriteSubprocessPipeProto.__init__c                 C   r>   r<   )r7   )r(   Z	transportr   r   r0   rb     rA   z(WriteSubprocessPipeProto.connection_madec                 C   s    d| j j› d| j› d| j›dS )Nú<z fd=z pipe=ú>)r/   r4   rS   r7   rC   r   r   r0   r;   
  s    z!WriteSubprocessPipeProto.__repr__c                 C   s    d| _ | j | j|¡ d | _d S )NT)rv   ri   rq   rS   r}   r   r   r0   r|     s   
z(WriteSubprocessPipeProto.connection_lostc                 C   ó   | j j ¡  d S r<   )ri   r   Úpause_writingrC   r   r   r0   r†     ó   z&WriteSubprocessPipeProto.pause_writingc                 C   r…   r<   )ri   r   Úresume_writingrC   r   r   r0   rˆ     r‡   z'WriteSubprocessPipeProto.resume_writingN)	r4   r~   r   r   rb   r;   r|   r†   rˆ   r   r   r   r0   r\   ÿ   s    r\   c                   @   s   e Zd Zdd„ ZdS )r`   c                 C   s   | j  | j|¡ d S r<   )ri   rr   rS   )r(   rl   r   r   r0   Údata_received  s   z%ReadSubprocessPipeProto.data_receivedN)r4   r~   r   r‰   r   r   r   r0   r`     s    r`   )r   r   r€   Ú r   r   Úlogr   ZSubprocessTransportr   ZBaseProtocolr\   ZProtocolr`   r   r   r   r0   Ú<module>   s     vÿ