
    h                         d 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
ej        ej                  Z G d d          Zdddej        fdZdddej        ddZdS ))create_subprocess_execcreate_subprocess_shell    N   )events)	protocols)streams)tasks)loggerc                   L     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
SubprocessStreamProtocolz0Like StreamReaderProtocol, but for a subprocess.c                     t                                          |           || _        d x| _        x| _        | _        d | _        d| _        g | _        | j	        
                                | _        d S )N)loopF)super__init___limitstdinstdoutstderr
_transport_process_exited	_pipe_fds_loopcreate_future_stdin_closed)selflimitr   	__class__s      )/usr/lib/python3.11/asyncio/subprocess.pyr   z!SubprocessStreamProtocol.__init__   sl    d###155
5T[4;$!Z5577    c                 D   | j         j        g}| j        |                    d| j                   | j        |                    d| j                   | j        |                    d| j                   d                    d                    |                    S )Nzstdin=zstdout=zstderr=z<{}> )r   __name__r   appendr   r   formatjoin)r   infos     r   __repr__z!SubprocessStreamProtocol.__repr__   s    '(:!KK///000;"KK1$+11222;"KK1$+11222}}SXXd^^,,,r   c                 J   || _         |                    d          }|Yt          j        | j        | j                  | _        | j                            |           | j        	                    d           |                    d          }|Yt          j        | j        | j                  | _
        | j
                            |           | j        	                    d           |                    d          }|$t          j        || d | j                  | _        d S d S )Nr   r   r      r   )protocolreaderr   )r   get_pipe_transportr   StreamReaderr   r   r   set_transportr   r#   r   StreamWriterr   )r   	transportstdout_transportstderr_transportstdin_transports        r   connection_madez(SubprocessStreamProtocol.connection_made(   s,   #$77::'!.T[48J@ @ @DKK%%&6777N!!!$$$$77::'!.T[48J@ @ @DKK%%&6777N!!!$$$#66q99& -o7;5937:? ? ?DJJJ '&r   c                 t    |dk    r| j         }n|dk    r| j        }nd }||                    |           d S d S Nr   r*   )r   r   	feed_data)r   fddatar,   s       r   pipe_data_receivedz+SubprocessStreamProtocol.pipe_data_received@   sS    77[FF1WW[FFFT""""" r   c                    |dk    rk| j         }||                                 |                     |           || j                            d            n| j                            |           d S |dk    r| j        }n|dk    r| j        }nd }|,||                                 n|                    |           || j	        v r| j	        
                    |           |                                  d S )Nr   r   r*   )r   closeconnection_lostr   
set_resultset_exceptionr   r   feed_eofr   remove_maybe_close_transport)r   r9   excpiper,   s        r   pipe_connection_lostz-SubprocessStreamProtocol.pipe_connection_lostJ   s
   77:D

  %%%{"--d3333"00555F77[FF1WW[FFF{!!!!$$S)))N!!"%%%##%%%%%r   c                 <    d| _         |                                  d S )NT)r   rC   r   s    r   process_exitedz'SubprocessStreamProtocol.process_exitede   s"    ###%%%%%r   c                     t          | j                  dk    r)| j        r$| j                                         d | _        d S d S d S )Nr   )lenr   r   r   r=   rH   s    r   rC   z/SubprocessStreamProtocol._maybe_close_transporti   sL    t~!##(<#O!!###"DOOO $###r   c                 &    || j         u r| j        S d S N)r   r   )r   streams     r   _get_close_waiterz*SubprocessStreamProtocol._get_close_waitern   s     TZ%%  r   )r"   
__module____qualname____doc__r   r'   r5   r;   rF   rI   rC   rO   __classcell__)r   s   @r   r   r      s        ::8 8 8 8 8- - -? ? ?0# # #& & &6& & &# # #
& & & & & & &r   r   c                   b    e Zd Zd Zd Zed             Zd Zd Zd Z	d Z
d Zd	 Zd
 ZddZdS )Processc                     || _         || _        || _        |j        | _        |j        | _        |j        | _        |                                | _        d S rM   )r   	_protocolr   r   r   r   get_pidpid)r   r1   r+   r   s       r   r   zProcess.__init__t   sI    #!
^
oo$$&&r   c                 2    d| j         j         d| j         dS )N<r!   >)r   r"   rY   rH   s    r   r'   zProcess.__repr__}   s"    84>*88TX8888r   c                 4    | j                                         S rM   )r   get_returncoderH   s    r   
returncodezProcess.returncode   s    --///r   c                 D   K   | j                                          d{V S )z?Wait until the process exit and return the process return code.N)r   _waitrH   s    r   waitzProcess.wait   s,      _**,,,,,,,,,r   c                 :    | j                             |           d S rM   )r   send_signal)r   signals     r   rd   zProcess.send_signal   s    ##F+++++r   c                 8    | j                                          d S rM   )r   	terminaterH   s    r   rg   zProcess.terminate   s    !!#####r   c                 8    | j                                          d S rM   )r   killrH   s    r   ri   zProcess.kill   s    r   c                   K   | j                                         }| j                            |           |r#t	          j        d| t          |                     	 | j                                         d {V  n6# t          t          f$ r"}|rt	          j        d| |           Y d }~nd }~ww xY w|rt	          j        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
   debugrK   drainBrokenPipeErrorConnectionResetErrorr=   )r   inputrm   rD   s       r   _feed_stdinzProcess._feed_stdin   s     
$$&&
 	KL7s5zzK K K	H*""$$$$$$$$$$!56 	H 	H 	H H;T3GGG	H
  	>L6===
s   A< <B/B**B/c                 
   K   d S rM    rH   s    r   _noopzProcess._noop   s      tr   c                   K   | j                             |          }|dk    r| j        }n|dk    sJ | j        }| j                                        r |dk    rdnd}t          j        d| |           |                                 d {V }| j                                        r |dk    rdnd}t          j        d| |           |	                                 |S )Nr*   r   r   r   z%r communicate: read %sz%r communicate: close %s)
r   r-   r   r   r   rk   r
   rm   readr=   )r   r9   r1   rN   nameoutputs         r   _read_streamzProcess._read_stream   s      O66r::	77[FF7777[F:!! 	@!Qww88HDL2D$???{{}}$$$$$$:!! 	A!Qww88HDL3T4@@@r   Nc                   K   ||                      |          }n|                                 }| j        |                     d          }n|                                 }| j        |                     d          }n|                                 }t          j        |||           d {V \  }}}|                                  d {V  ||fS r7   )rr   ru   r   rz   r   r	   gatherrb   )r   rq   r   r   r   s        r   communicatezProcess.communicate   s      $$U++EEJJLLE;"&&q))FFZZ\\F;"&&q))FFZZ\\F&+l5&&&I&I I I I I I Ivviikkr   rM   )r"   rP   rQ   r   r'   propertyr_   rb   rd   rg   ri   rr   ru   rz   r}   rt   r   r   rU   rU   s   s        ' ' '9 9 9 0 0 X0- - -, , ,$ $ $    "    "           r   rU   c                    	K   t          j                    		fd} 	j        || f|||d| d {V \  }}t          ||	          S )Nc                  &    t                     S Nr)   r   r)   s   r   <lambda>z)create_subprocess_shell.<locals>.<lambda>       7e=A C  C  C r   r   r   r   )r   get_running_loopsubprocess_shellrU   )
cmdr   r   r   r   kwdsprotocol_factoryr1   r+   r   s
       `    @r   r   r      s      "$$DC C C C C 5 5!! ! ! !      Ix 9h---r   )r   r   r   r   c                   
K   t          j                    

fd} 
j        || g|R |||d| d {V \  }}	t          ||	
          S )Nc                  &    t                     S r   r   r)   s   r   r   z(create_subprocess_exec.<locals>.<lambda>   r   r   r   )r   r   subprocess_execrU   )programr   r   r   r   argsr   r   r1   r+   r   s       `     @r   r   r      s       "$$DC C C C C 4 4!! ! F	! ! 	! !      Ix
 9h---r   )__all__
subprocess r   r   r   r	   logr
   PIPESTDOUTDEVNULLFlowControlMixinSubprocessProtocolr   rU   _DEFAULT_LIMITr   r   rt   r   r   <module>r      sK  
=                                   		

_& _& _& _& _&w7(;_& _& _&DR  R  R  R  R  R  R  R j .2$t(/(>	. 	. 	. 	. 8<D(,G4J. . . . . . .r   