HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.6/site-packages/pexpect/__pycache__/popen_spawn.cpython-36.pyc
3

��Zd�@s�dZddlZddlZddlZddlZddlZddlZddlZyddlm	Z	m
Z
Wn$ek
rtddl	m	Z	m
Z
YnXddlm
Z
mZddlmZddlmZGdd	�d	e
�ZdS)
zJProvides an interface like pexpect.spawn interface using subprocess.Popen
�N)�Queue�Empty�)�	SpawnBase�PY3)�EOF)�string_typesc	sleZdZd�fdd�	ZdZdd	�Zd
d�Zdd
�Zdd�Zdd�Z	ddd�Z
dd�Zdd�Zdd�Z
�ZS)�
PopenSpawn���N�strictc
	stt|�j||||||	d�|dkr4tjjd�|_n|jtj�|_tdt	j
t	jt	j
||
|d�}tj
dkr�t	j�}|jt	jO_||d<t	j|d<t|t�r�tj
dkr�tj|tjdkd	�}t	j|f|�|_|jj|_d
|_|j�|_t�|_tj|j d�|_!|j!j"d�|j!j#�dS)
N)�timeout�maxread�searchwindowsize�logfile�encoding�codec_errors�asciir)�bufsize�stdin�stderr�stdout�cwd�
preexec_fn�env�win32�startupinfo�
creationflags�posix)rF)�targetT)$�superr	�__init__�os�linesep�encodeZcrlfZstring_type�dict�
subprocess�PIPE�STDOUT�sys�platformZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWZCREATE_NEW_PROCESS_GROUP�
isinstancer�shlex�split�name�Popen�proc�pid�closed�_bufr�_read_queue�	threading�Thread�_read_incomingZ_read_thread�	setDaemon�start)
�self�cmdr
rrrrrrrr�kwargsr)�	__class__��6/tmp/pip-build-hc5bmb4z/pexpect/pexpect/popen_spawn.pyr!s0
	



zPopenSpawn.__init__Fc
Cs�|j}|jr8|r*||d�|_|d|�Sd|_td��|dkrH|j}n|dkrTd}tj�}xntj�||kr�|r�t|�|kr�y|jj�}Wnt	k
r�PYq^X|dkr�d|_P||j
j|dd�7}q^W|d|�||d�}|_|j|d�|S)	NTzEnd Of File (EOF).rg��.AF)�final�read���)
r3�_read_reached_eofZflag_eofrr
�time�lenr4�
get_nowaitr�_decoder�decode�_log)r:�sizer
�buf�t0�incoming�rr>r>r?�read_nonblockingAs0"zPopenSpawn.read_nonblockingcCsz|jjj�}xhd}ytj|d�}Wn.tk
rP}z|j|d�WYdd}~XnX|sf|jjd�dS|jj|�qWdS)z6Run in a thread to move output from a pipe to a queue.�irAN)	r0r�filenor"rA�OSErrorrIr4�put)r:rQrK�er>r>r?r7dszPopenSpawn._read_incomingcCs|j|�dS)zHThis is similar to send() except that there is no return value.
        N)�send)r:�sr>r>r?�writeuszPopenSpawn.writecCsx|D]}|j|�qWdS)z�This 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.
        N)rU)r:�sequencerVr>r>r?�
writelineszs
zPopenSpawn.writelinescCsR|j|�}|j|d�|jj|dd�}tr8|jjj|�S|jjj|�t|�SdS)zZSend data to the subprocess' stdin.

        Returns the number of bytes written.
        rUF)r@N)	Z_coerce_send_stringrI�_encoderr$rr0rrWrE)r:rV�br>r>r?rU�s
zPopenSpawn.send�cCs|j|�}||j|j�S)z�Wraps send(), sending string ``s`` to child process, with os.linesep
        automatically appended. Returns number of bytes written. )rUr#)r:rV�nr>r>r?�sendline�s
zPopenSpawn.sendlinecCs8|jj�}|dkr ||_d|_nd|_||_d|_|S)zKWait for the subprocess to finish.

        Returns the exit code.
        rNT)r0�waitZ
exitstatusZsignalstatusZ
terminated)r:�statusr>r>r?r_�s
zPopenSpawn.waitcCsTtjdkr@|tjtjgkr"tj}n|tjtjgkr:tj}ntj}tj	|j
j|�dS)z}Sends a Unix signal to the subprocess.

        Use constants from the :mod:`signal` module to specify which signal.
        rN)r)r*�signal�SIGINTZCTRL_C_EVENTZSIGBREAKZCTRL_BREAK_EVENT�SIGTERMr"�killr0r1)r:�sigr>r>r?rd�s
zPopenSpawn.killcCs|jjj�dS)z+Closes the stdin pipe from the writing end.N)r0r�close)r:r>r>r?�sendeof�szPopenSpawn.sendeof)	r
rNNNNNrN)r\)�__name__�
__module__�__qualname__r!rCrOr7rWrYrUr^r_rdrg�
__classcell__r>r>)r=r?r	s(#

r	)�__doc__r"r5r&r)rDrar,�queuerr�ImportErrorZ	spawnbaserr�
exceptionsr�utilsrr	r>r>r>r?�<module>s