
    Mh                         d Z ddlZddlZddlZddlZddlZddlZddlZ	 ddlm	Z	m
Z
 n# e$ r ddl	m	Z	m
Z
 Y nw xY wddlmZmZ ddlmZ ddlmZ  G d d	e          ZdS )
zJProvides an interface like pexpect.spawn interface using subprocess.Popen
    N)QueueEmpty   )	SpawnBasePY3)EOF)string_typesc                   b     e Zd Z	 	 	 d fd	ZdZd Zd Zd	 Zd
 Zd Z	ddZ
d Zd Zd Z xZS )
PopenSpawn     Nstrictc           	         t          t          |                               ||||||	           |%t          j                            d          | _        n$|                     t          j                  | _        t          dt          j
        t          j        t          j
        ||
|          }t          j        dk    rAt          j                    }|xj        t          j        z  c_        ||d<   t          j        |d<   t%          |t&                    r4t          j        dk    r$t)          j        |t          j        dk    	          }t          j        |fi || _        | j        j        | _        d
| _        |                                 | _        t9                      | _        t=          j        | j                   | _!        d| j!        _"        | j!        #                                 d S )N)timeoutmaxreadsearchwindowsizelogfileencodingcodec_errorsasciir   )bufsizestdinstderrstdoutcwd
preexec_fnenvwin32startupinfocreationflagsposix)r!   F)targetT)$superr   __init__oslinesepencodecrlfstring_typedict
subprocessPIPESTDOUTsysplatformSTARTUPINFOdwFlagsSTARTF_USESHOWWINDOWCREATE_NEW_PROCESS_GROUP
isinstancer	   shlexsplitnamePopenprocpidclosed_bufr   _read_queue	threadingThread_read_incoming_read_threaddaemonstart)selfcmdr   r   r   r   r   r   r   r   r   kwargsr   	__class__s                S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pexpect/popen_spawn.pyr$   zPopenSpawn.__init__   s    	j$(('!17! 	) 	> 	> 	> 
))733DII(("*55DIaz'.z*#? ? ? <7""$022K:#BB$/F=!&0&IF?#c<(( 	=S\W-D-D+cG);<<<C$S33F33	9=$$&&	 77%,D4GHHH#' !!!!!    Fc                    | j         }| j        r1|r||d          | _         |d |         S d| _        t          d          |dk    r| j        }n|d}t          j                    }t          j                    |z
  |k     r|rt          |          |k     r	 | j                                        }|d| _        n_|| j	        
                    |d          z  }n# t          $ r Y n3w xY wt          j                    |z
  |k     r|rt          |          |k     |d |         ||d          c}| _         |                     |d           |S )NTzEnd Of File (EOF).g    .AFfinalread)r<   _read_reached_eofflag_eofr   r   timelenr=   
get_nowait_decoderdecoder   _log)rD   sizer   buft0incomingrs          rH   read_nonblockingzPopenSpawn.read_nonblockingA   st   i! 	0  0J	5D5z! $.///b==lGG_GY[[y{{R7**t*C4	C+6688 #-1D*t}++HE+BBB     y{{R7**t*C4 5D5z3tuu:49		!Vs   C 
C%$C%c                 >   | j         j                                        }	 d}	 t          j        |d          }n-# t
          $ r }|                     |d           Y d}~nd}~ww xY w|s| j                            d           dS | j                            |           )z6Run in a thread to move output from a pipe to a queue.r   rI   i   rN   N)	r9   r   filenor%   rN   OSErrorrV   r=   put)rD   r^   rX   es       rH   r@   zPopenSpawn._read_incomingd   s    !((**	&C%gfd++ % % %		!V$$$$$$$$%   $$T***  %%%	&s   9 
A#AA#c                 0    |                      |           dS )zHThis is similar to send() except that there is no return value.
        Nsend)rD   ss     rH   writezPopenSpawn.writeu   s     			!rI   c                 :    |D ]}|                      |           dS )zThis calls write() for each element in the sequence.

        The sequence can be any iterable object producing strings, typically a
        list of strings. This does not add line separators. There is no return
        value.
        Nrc   )rD   sequencere   s      rH   
writelineszPopenSpawn.writelinesz   s.      	 	AIIaLLLL	 	rI   c                 8   |                      |          }|                     |d           | j                            |d          }t          r| j        j                            |          S | j        j                            |           t          |          S )zZSend data to the subprocess' stdin.

        Returns the number of bytes written.
        rd   FrL   )	_coerce_send_stringrV   _encoderr'   r   r9   r   rf   rR   )rD   re   bs      rH   rd   zPopenSpawn.send   s    
 $$Q''		!VM  % 00 	9?((+++ IO!!!$$$q66MrI    c                 f    |                      |          }||                      | j                  z   S )zWraps send(), sending string ``s`` to child process, with os.linesep
        automatically appended. Returns number of bytes written. )rd   r&   )rD   re   ns      rH   sendlinezPopenSpawn.sendline   s,     IIaLL499T\****rI   c                     | j                                         }|dk    r|| _        d| _        nd| _        | | _        d| _        |S )zKWait for the subprocess to finish.

        Returns the exit code.
        r   NT)r9   wait
exitstatussignalstatus
terminated)rD   statuss     rH   rs   zPopenSpawn.wait   sM    
 !!Q;;$DO $D"DO!'DrI   c                    t           j        dk    rZ|t          j        t          j        fv rt          j        }n3|t          j        t          j        fv rt          j        }nt          j        }t          j	        | j
        j        |           dS )z}Sends a Unix signal to the subprocess.

        Use constants from the :mod:`signal` module to specify which signal.
        r   N)r.   r/   signalSIGINTCTRL_C_EVENTSIGBREAKCTRL_BREAK_EVENTSIGTERMr%   killr9   r:   )rD   sigs     rH   r   zPopenSpawn.kill   sr    
 <7""v}f&9:::)&*ABBB-n
	s#####rI   c                 B    | j         j                                         dS )z+Closes the stdin pipe from the writing end.N)r9   r   close)rD   s    rH   sendeofzPopenSpawn.sendeof   s    	rI   )	r   r   NNNNNr   N)rn   )__name__
__module____qualname__r$   rO   r\   r@   rf   ri   rd   rq   rs   r   r   __classcell__)rG   s   @rH   r   r      s        GK<@37(" (" (" (" (" ("T ! ! !F& & &"  
    "+ + + +  $ $ $             rI   r   )__doc__r%   r>   r+   r.   rQ   ry   r5   queuer   r   ImportError	spawnbaser   r   
exceptionsr   utilsr	   r    rI   rH   <module>r      s)    				         



   #""""""""" # # #""""""""""# & % % % % % % %            h  h  h  h  h  h  h  h  h  h s   ) 99