HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/self/root/lib/python3/dist-packages/pexpect/__pycache__/popen_spawn.cpython-38.pyc
U

�C
[�@s�dZddlZddlZddlZddlZddlZddlZddlZzddlm	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�|dkr4tj�d�|_n|�tj�|_tdt	j
t	jt	j
||
|d�}tj
dkr�t	��}|jt	jO_||d<t	j|d<t|t�r�tj
dkr�tj|tjdkd	�}t	j|f|�|_|jj|_d
|_|��|_t�|_tj|j d�|_!|j!�"d�|j!�#�dS)
N)�timeout�maxread�searchwindowsize�logfile�encoding�codec_errors�asciir)�bufsize�stdin�stderr�stdout�cwd�
preexec_fn�env�win32�startupinfoZ
creationflags�posix)rF)�targetT)$�superr	�__init__�os�linesep�encodeZcrlfZstring_type�dict�
subprocess�PIPEZSTDOUT�sys�platformZSTARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWZCREATE_NEW_PROCESS_GROUP�
isinstancer�shlex�split�name�Popen�proc�pid�closed�_bufr�_read_queue�	threadingZThread�_read_incomingZ_read_threadZ	setDaemon�start)
�self�cmdr
rrrrrrrr�kwargsr��	__class__��5/usr/lib/python3/dist-packages/pexpect/popen_spawn.pyr s>��



zPopenSpawn.__init__FcCs�|j}|jr8|r*||d�|_|d|�Sd|_td��|dkrH|j}n|dkrTd}t��}t��||kr�|r�t|�|kr�z|j��}Wnt	k
r�Yq�Yq\X|dkr�d|_q�||j
j|dd�7}q\|d|�||d�}|_|�|d�|S)NTzEnd Of File (EOF).���g��.AF��final�read)
r1�_read_reached_eofZflag_eofrr
�time�lenr2Z
get_nowaitrZ_decoder�decode�_log)r6�sizer
�bufZt0Zincoming�rr;r;r<�read_nonblockingAs0 
zPopenSpawn.read_nonblockingc
Csv|jj��}d}zt�|d�}Wn.tk
rN}z|�|d�W5d}~XYnX|sd|j�d�dS|j�|�qdS)z6Run in a thread to move output from a pipe to a queue.�ir@N)	r.r�filenor!r@�OSErrorrEr2Zput)r6rKrG�er;r;r<r4dszPopenSpawn._read_incomingcCs|�|�dS)zHThis is similar to send() except that there is no return value.
        N��send)r6�sr;r;r<�writeuszPopenSpawn.writecCs|D]}|�|�qdS)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.
        NrN)r6ZsequencerPr;r;r<�
writelineszszPopenSpawn.writelinescCsR|�|�}|�|d�|jj|dd�}tr8|jj�|�S|jj�|�t|�SdS)zZSend data to the subprocess' stdin.

        Returns the number of bytes written.
        rOFr>N)	Z_coerce_send_stringrEZ_encoderr#rr.rrQrC)r6rP�br;r;r<rO�s
zPopenSpawn.send�cCs|�|�}||�|j�S)z�Wraps send(), sending string ``s`` to child process, with os.linesep
        automatically appended. Returns number of bytes written. )rOr")r6rP�nr;r;r<�sendline�s
zPopenSpawn.sendlinecCs8|j��}|dkr ||_d|_nd|_||_d|_|S)zKWait for the subprocess to finish.

        Returns the exit code.
        rNT)r.�waitZ
exitstatusZsignalstatusZ
terminated)r6Zstatusr;r;r<rW�s
zPopenSpawn.waitcCsTtjdkr@|tjtjfkr"tj}n|tjtjfkr:tj}ntj}t�	|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!�killr.r/)r6Zsigr;r;r<r[�s
zPopenSpawn.killcCs|jj��dS)z+Closes the stdin pipe from the writing end.N)r.r�close)r6r;r;r<�sendeof�szPopenSpawn.sendeof)	r
rNNNNNrN)rT)�__name__�
__module__�__qualname__r rArIr4rQrRrOrVrWr[r]�
__classcell__r;r;r9r<r	s$�*#

r	)�__doc__r!r3r%r'rBrXr*Zqueuerr�ImportErrorZ	spawnbaserr�
exceptionsrZutilsrr	r;r;r;r<�<module>s