
    Rh9                     2   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y))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                  j                         | _        y )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.12/asyncio/subprocess.pyr   z!SubprocessStreamProtocol.__init__   sZ    d#155
5T[4;$!ZZ557    c                 l   | j                   j                  g}| j                  |j                  d| j                         | j                  |j                  d| j                         | j
                  |j                  d| j
                         dj                  dj                  |            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;;"KK'$++12;;"KK'$++12}}SXXd^,,r   c                 n   || _         |j                  d      }|ft        j                  | j                  | j
                        | _        | j                  j                  |       | j                  j                  d       |j                  d      }|ft        j                  | j                  | j
                        | _
        | j                  j                  |       | j                  j                  d       |j                  d      }|)t        j                  || d | j
                        | _        y y )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[[48JJ@DKKK%%&67NN!!!$$77:'!..T[[48JJ@DKKK%%&67NN!!!$#66q9& --o7;5937::?DJ 'r   c                 x    |dk(  r| j                   }n|dk(  r| j                  }nd }||j                  |       y y Nr   r*   )r   r   	feed_data)r   fddatar,   s       r   pipe_data_receivedz+SubprocessStreamProtocol.pipe_data_received@   s@    7[[F1W[[FFT" r   c                    |dk(  rz| j                   }||j                          | j                  |       || j                  j	                  d        y | j                  j                  |       d| j                  _        y |dk(  r| j                  }n|dk(  r| j                  }nd }|$||j                          n|j                  |       || j                  v r| j                  j                  |       | j                          y )Nr   Fr   r*   )r   closeconnection_lostr   
set_resultset_exception_log_tracebackr   r   feed_eofr   remove_maybe_close_transport)r   r9   excpiper,   s        r   pipe_connection_lostz-SubprocessStreamProtocol.pipe_connection_lostJ   s    7::D

  %{""--d3 	 ""005 5:""17[[F1W[[FF{!$$S)NN!!"%##%r   c                 2    d| _         | j                          y )NT)r   rD   r   s    r   process_exitedz'SubprocessStreamProtocol.process_exitedh   s    ###%r   c                     t        | j                        dk(  r/| j                  r"| j                  j	                          d | _        y y y )Nr   )lenr   r   r   r=   rI   s    r   rD   z/SubprocessStreamProtocol._maybe_close_transportl   s:    t~~!#(<(<OO!!#"DO )=#r   c                 8    || j                   u r| j                  S y N)r   r   )r   streams     r   _get_close_waiterz*SubprocessStreamProtocol._get_close_waiterq   s    TZZ%%%  r   )r"   
__module____qualname____doc__r   r'   r5   r;   rG   rJ   rD   rP   __classcell__)r   s   @r   r   r      s.    :8-?0#&<&#
&r   r   c                   Z    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y)Processc                     || _         || _        || _        |j                  | _        |j                  | _        |j
                  | _        |j                         | _        y rN   )r   	_protocolr   r   r   r   get_pidpid)r   r1   r+   r   s       r   r   zProcess.__init__w   sH    #!
^^
oooo$$&r   c                 P    d| j                   j                   d| j                   dS )N<r!   >)r   r"   rZ   rI   s    r   r'   zProcess.__repr__   s&    4>>**+1TXXJa88r   c                 6    | j                   j                         S rN   )r   get_returncoderI   s    r   
returncodezProcess.returncode   s    --//r   c                 R   K   | j                   j                          d{   S 7 w)z?Wait until the process exit and return the process return code.N)r   _waitrI   s    r   waitzProcess.wait   s     __**,,,,s   '%'c                 :    | j                   j                  |       y rN   )r   send_signal)r   signals     r   re   zProcess.send_signal   s    ##F+r   c                 8    | j                   j                          y rN   )r   	terminaterI   s    r   rh   zProcess.terminate   s    !!#r   c                 8    | j                   j                          y rN   )r   killrI   s    r   rj   zProcess.kill   s    r   c                   K   | j                   j                         }	 |=| j                  j                  |       |r t	        j
                  d| t        |             | j                  j                          d {    |rt	        j
                  d|        | j                  j                          y 7 7# t        t        f$ r#}|rt	        j
                  d| |       Y d }~bd }~ww xY ww)Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin)r   	get_debugr   writer
   debugrL   drainBrokenPipeErrorConnectionResetErrorr=   )r   inputrn   rE   s       r   _feed_stdinzProcess._feed_stdin   s     

$$&	H 

  'LL?s5zS **""$$$ LL6=

 %!56 	H ;T3G		HsA   C)AB4 :B2;B4 ?3C)2B4 4C&C!C)!C&&C)c                    K   y wrN    rI   s    r   _noopzProcess._noop   s	     s   c                   K   | j                   j                  |      }|dk(  r| j                  }n|dk(  sJ | j                  }| j                  j                         r |dk(  rdnd}t        j                  d| |       |j                          d {   }| j                  j                         r |dk(  rdnd}t        j                  d| |       |j                          |S 7 Pw)Nr*   r   r   r   z%r communicate: read %sz%r communicate: close %s)
r   r-   r   r   r   rl   r
   rn   readr=   )r   r9   r1   rO   nameoutputs         r   _read_streamzProcess._read_stream   s     OO66r:	7[[F7N7[[F::!!Qw8HDLL2D$?{{}$::!!Qw8HDLL3T4@ %s   BC#C!AC#Nc                   K   | j                   | j                  |      }n| j                         }| j                  | j	                  d      }n| j                         }| j
                  | j	                  d      }n| j                         }t        j                  |||       d {   \  }}}| j                          d {    ||fS 7 $7 
wr7   )	r   rs   rv   r   r{   r   r	   gatherrc   )r   rr   r   r   r   s        r   communicatezProcess.communicate   s     ::!$$U+EJJLE;;"&&q)FZZ\F;;"&&q)FZZ\F&+ll5&&&I Ivviik !Js$   B%C'C(CC	CCrN   )r"   rQ   rR   r   r'   propertyr`   rc   re   rh   rj   rs   rv   r{   r~   ru   r   r   rV   rV   v   sH    '9 0 0-,$(" r   rV   c                    	K   t        j                         		fd} 	j                  || f|||d| d {   \  }}t        ||	      S 7 w)Nc                      t               S Nr)   r   r)   s   r   <lambda>z)create_subprocess_shell.<locals>.<lambda>       7e=A C r   r   r   r   )r   get_running_loopsubprocess_shellrV   )
cmdr   r   r   r   kwdsprotocol_factoryr1   r+   r   s
       `    @r   r   r      sm     ""$DC 5 5 5!! ! Ix 9h--	s   6AAA)r   r   r   r   c                   
K   t        j                         

fd} 
j                  || g||||d| d {   \  }}	t        ||	
      S 7 w)Nc                      t               S r   r   r)   s   r   r   z(create_subprocess_exec.<locals>.<lambda>   r   r   r   )r   r   subprocess_execrV   )programr   r   r   r   argsr   r   r1   r+   r   s       `     @r   r   r      sy      ""$DC 4 4 4!! F	! 	! Ix
 9h--s   9AAA)__all__
subprocess r   r   r   r	   logr
   PIPESTDOUTDEVNULLFlowControlMixinSubprocessProtocolr   rV   _DEFAULT_LIMITr   r   ru   r   r   <module>r      s   
=       			


b&w77(;;b&JU  U p .2$t(/(>(>	. 8<D(,G4J4J.r   