a DOg@sdZddlZddlZddlmZddlmZddlmZddlmZddlm Z ej Z ej Z ej Z Gd d d ej ejZGd d d Zddddejfd dZddddejdddZdS))create_subprocess_execcreate_subprocess_shellN)events) protocols)streams)tasks)loggercsXeZdZdZfddZddZddZdd Zd d Zd d Z ddZ ddZ Z S)SubprocessStreamProtocolz0Like StreamReaderProtocol, but for a subprocess.csHtj|d||_d|_|_|_d|_d|_g|_|j |_ dS)NloopF) super__init___limitstdinstdoutstderr _transport_process_exited _pipe_fds_loopZ create_future _stdin_closed)selflimitr  __class__7/opt/alt/python39/lib64/python3.9/asyncio/subprocess.pyrsz!SubprocessStreamProtocol.__init__cCsn|jjg}|jdur&|d|j|jdurB|d|j|jdur^|d|jdd|S)Nzstdin=zstdout=zstderr=z<{}> )r__name__rappendrrformatjoin)rinforrr__repr__s    z!SubprocessStreamProtocol.__repr__cCs||_|d}|durDtj|j|jd|_|j||j d|d}|durtj|j|jd|_ |j ||j d|d}|durtj ||d|jd|_ dS)Nrrr r)protocolreaderr ) rget_pipe_transportr StreamReaderrrrZ set_transportrr r StreamWriterr)r transportZstdout_transportZstderr_transportZstdin_transportrrrconnection_made)s,       z(SubprocessStreamProtocol.connection_madecCs:|dkr|j}n|dkr |j}nd}|dur6||dS)Nrr&)rrZ feed_data)rfddatar(rrrpipe_data_receivedAsz+SubprocessStreamProtocol.pipe_data_receivedcCs|dkrN|j}|dur||||dur>|jdn |j|dS|dkr^|j}n|dkrn|j}nd}|dur|dur|n ||||j vr|j || dS)Nrrr&) rcloseZconnection_lostrZ set_resultZ set_exceptionrrZfeed_eofrremove_maybe_close_transport)rr.excpiper(rrrpipe_connection_lostKs*      z-SubprocessStreamProtocol.pipe_connection_lostcCsd|_|dS)NT)rr3rrrrprocess_exitedfsz'SubprocessStreamProtocol.process_exitedcCs(t|jdkr$|jr$|jd|_dS)Nr)lenrrrr1r7rrrr3js z/SubprocessStreamProtocol._maybe_close_transportcCs||jur|jSdSN)rr)rstreamrrr_get_close_waiteros z*SubprocessStreamProtocol._get_close_waiter) r __module__ __qualname____doc__rr$r-r0r6r8r3r< __classcell__rrrrr s   r c@sjeZdZddZddZeddZddZd d Zd d Z d dZ ddZ ddZ ddZ dddZdS)ProcesscCs8||_||_||_|j|_|j|_|j|_||_dSr:)rZ _protocolrrrrZget_pidpid)rr,r'r rrrruszProcess.__init__cCsd|jjd|jdS)N)rrrBr7rrrr$~szProcess.__repr__cCs |jSr:)rZget_returncoder7rrr returncodeszProcess.returncodecs|jIdHS)z?Wait until the process exit and return the process return code.N)rZ_waitr7rrrwaitsz Process.waitcCs|j|dSr:)r send_signal)rsignalrrrrGszProcess.send_signalcCs|jdSr:)r terminater7rrrrIszProcess.terminatecCs|jdSr:)rkillr7rrrrJsz Process.killc s|j}|j||r,td|t|z|jIdHWn:tt fyz}z|rftd||WYd}~n d}~00|rtd||j dS)Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin) r get_debugrwriter debugr9ZdrainBrokenPipeErrorConnectionResetErrorr1)rinputrMr4rrr _feed_stdins   $ zProcess._feed_stdincsdSr:rr7rrr_noopsz Process._noopcs|j|}|dkr|j}n|dks(J|j}|jrV|dkrDdnd}td|||IdH}|jr|dkrzdnd}td||| |S)Nr&rrrz%r communicate: read %sz%r communicate: close %s) rr)rrrrKr rMreadr1)rr.r,r;nameoutputrrr _read_streams    zProcess._read_streamNcs|dur||}n|}|jdur2|d}n|}|jdurP|d}n|}tj||||jdIdH\}}}|IdH||fS)Nrr&r ) rQrRrrVrrZ_gatherrrF)rrPrrrrrr communicates      zProcess.communicate)N)rr=r>rr$propertyrErFrGrIrJrQrRrVrWrrrrrAts  rAc sbdurtntjdtddfdd}j||f|||d|IdH\}} t|| S)NZThe loop argument is deprecated since Python 3.8 and scheduled for removal in Python 3.10.r& stacklevelcs tdSNr%r rr%rrsz)create_subprocess_shell..rrr)rget_event_loopwarningswarnDeprecationWarningZsubprocess_shellrA) cmdrrrr rkwdsprotocol_factoryr,r'rr%rrs" r)rrrr rc shdurtntjdtddfdd}j||g|R|||d|IdH\} } t| | S)NrYr&rZcs tdSr\r]rr%rrr^sz(create_subprocess_exec..r_)rr`rarbrcZsubprocess_execrA) Zprogramrrrr rargsrerfr,r'rr%rrs& r)__all__ subprocessrarrrrlogr PIPEZSTDOUTZDEVNULLZFlowControlMixinZSubprocessProtocolr rAZ_DEFAULT_LIMITrrrrrrs*     bV