%PDF-
%PDF-
Mini Shell
Mini Shell
�q�\��
@s ddgZddlZddlmZddlmZddlmZddlmZdd lmZdd
l m
Z
ejZejZej
Z
Gdd�dejej�ZGd
d�d�Zeddddejdd��Zedddddddddejdd��ZdS)�create_subprocess_exec�create_subprocess_shell�N�)�events)� protocols)�streams)�tasks)� coroutine)�loggercspeZdZdZ�fdd�Zdd�Zdd�Zdd �Zd
d�Zdd
�Z dd�Z
�S)�SubprocessStreamProtocolz0Like StreamReaderProtocol, but for a subprocess.csRt�jd|�||_d|_|_|_d|_d|_g|_dS)N�loopF) �super�__init__�_limit�stdin�stdout�stderr�
_transport�_process_exited� _pipe_fds)�self�limitr)� __class__��7/opt/alt/python35/lib64/python3.5/asyncio/subprocess.pyrs z!SubprocessStreamProtocol.__init__cCs�|jjg}|jdk r2|jd|j�|jdk rU|jd|j�|jdk rx|jd|j�ddj|�S)Nzstdin=%rz stdout=%rz stderr=%rz<%s>� )r�__name__r�appendrr�join)r�inforrr�__repr__sz!SubprocessStreamProtocol.__repr__cCs||_|jd�}|dk retjd|jd|j�|_|jj|�|jj d�|jd�}|dk r�tjd|jd|j�|_
|j
j|�|jj d�|jd�}|dk rtj|d|ddd|j�|_dS)Nrrr�r�protocol�reader)
r�get_pipe_transportr�StreamReaderr�_looprZ
set_transportrrr�StreamWriterr)r� transportZstdout_transportZstderr_transportZstdin_transportrrr�connection_made(s& z(SubprocessStreamProtocol.connection_madecCsS|dkr|j}n|dkr0|j}nd}|dk rO|j|�dS)Nrr!)rrZ feed_data)r�fd�datar#rrr�pipe_data_received@sz+SubprocessStreamProtocol.pipe_data_receivedcCs�|dkr<|j}|dk r+|j�|j|�dS|dkrT|j}n|dkrl|j}nd}|dkr�|dkr�|j�n
|j|�||jkr�|jj|�|j �dS)Nrrr!)
r�closeZconnection_lostrrZfeed_eofZ
set_exceptionr�remove�_maybe_close_transport)rr*�exc�piper#rrr�pipe_connection_lostJs$
z-SubprocessStreamProtocol.pipe_connection_lostcCsd|_|j�dS)NT)rr/)rrrr�process_exitedas z'SubprocessStreamProtocol.process_exitedcCs8t|j�dkr4|jr4|jj�d|_dS)Nr)�lenrrrr-)rrrrr/es
z/SubprocessStreamProtocol._maybe_close_transport)r�
__module__�__qualname__�__doc__rr r)r,r2r3r/rr)rrrs
rc@s�eZdZdd�Zdd�Zedd��Zedd��Zd d
�Z dd�Z
d
d�Zedd��Zedd��Z
edd��Zeddd��ZdS)�ProcesscCsR||_||_||_|j|_|j|_|j|_|j�|_dS)N)rZ _protocolr&rrrZget_pid�pid)rr(r"rrrrrls zProcess.__init__cCsd|jj|jfS)Nz<%s %s>)rrr9)rrrrr uszProcess.__repr__cCs
|jj�S)N)rZget_returncode)rrrr�
returncodexszProcess.returncodeccs|jj�EdHS)zdWait until the process exit and return the process return code.
This method is a coroutine.N)rZ_wait)rrrr�wait|szProcess.waitcCs|jj|�dS)N)r�send_signal)r�signalrrrr<�szProcess.send_signalcCs|jj�dS)N)r� terminate)rrrrr>�szProcess.terminatecCs|jj�dS)N)r�kill)rrrrr?�szProcess.killccs�|jj�}|jj|�|r>tjd|t|��y|jj�EdHWnDtt fk
r�}z|r�tjd||�WYdd}~XnX|r�tjd|�|jj
�dS)Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin)r&� get_debugr�writer
�debugr4Zdrain�BrokenPipeError�ConnectionResetErrorr-)r�inputrBr0rrr�_feed_stdin�s &zProcess._feed_stdincCsdS)Nr)rrrr�_noop�sz
Process._noopccs�|jj|�}|dkr*|j}n|dks<t�|j}|jj�r|dkrfdnd}tjd||�|j �EdH}|jj�r�|dkr�dnd}tjd||�|j
�|S)Nr!rrrz%r communicate: read %sz%r communicate: close %s)rr$r�AssertionErrorrr&r@r
rB�readr-)rr*r(�stream�name�outputrrr�_read_stream�s
zProcess._read_streamNccs�|dk r|j|�}n|j�}|jdk rK|jd�}n|j�}|jdk rx|jd�}n|j�}tj|||d|j�EdH\}}}|j�EdH||fS)Nrr!r) rFrGrrMrrZgatherr&r;)rrErrrrrr�communicate�szProcess.communicate)rr5r6rr �propertyr:r r;r<r>r?rFrGrMrNrrrrr8ks r8c
+so�dkrtj����fdd�}�j||d|d|d||�EdH\}} t|| ��S)Ncstd�d��S)Nrr)rr)rrrr�<lambda>�sz)create_subprocess_shell.<locals>.<lambda>rrr)r�get_event_loopZsubprocess_shellr8)
�cmdrrrrr�kwds�protocol_factoryr(r"r)rrrr�srrrrrc/sr�dkrtj����fdd�}�j|||d|d|d||�EdH\} }
t| |
��S)Ncstd�d��S)Nrr)rr)rrrrrP�sz(create_subprocess_exec.<locals>.<lambda>rrr)rrQZsubprocess_execr8)Zprogramrrrrr�argsrSrTr(r"r)rrrr�s )�__all__�
subprocess�rrrrZ
coroutinesr �logr
�PIPEZSTDOUTZDEVNULLZFlowControlMixinZSubprocessProtocolrr8Z_DEFAULT_LIMITrrrrrr�<module>s( X]
Zerion Mini Shell 1.0