a `@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_loop create_future _stdin_closed)selflimitr  __class__5/usr/local/src/Python-3.9.6/Lib/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 StreamReaderrrr set_transportrr!r StreamWriterr)r transportZstdout_transportZstderr_transportZstdin_transportrrrconnection_made)s,       z(SubprocessStreamProtocol.connection_madecCs:|dkr|j}n|dkr |j}nd}|dur6||dS)Nrr')rr 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') rcloseconnection_lostr set_result set_exceptionrrfeed_eofrremove_maybe_close_transport)rr1excpiper)rrrpipe_connection_lostKs*      z-SubprocessStreamProtocol.pipe_connection_lostcCsd|_|dS)NT)rr:rrrrprocess_exitedfsz'SubprocessStreamProtocol.process_exitedcCs(t|jdkr$|jr$|jd|_dS)Nr)lenrrrr4r>rrrr:js z/SubprocessStreamProtocol._maybe_close_transportcCs||jur|jSdSN)rr)rstreamrrr_get_close_waiteros z*SubprocessStreamProtocol._get_close_waiter) r __module__ __qualname____doc__rr%r/r3r=r?r:rC __classcell__rrrrr s   r c@sjeZdZddZddZeddZddZd d Zd d Z d dZ ddZ ddZ ddZ dddZdS)ProcesscCs8||_||_||_|j|_|j|_|j|_||_dSrA)r _protocolrrrrget_pidpid)rr.r(r rrrruszProcess.__init__cCsd|jjd|jdS)N)rr rKr>rrrr%~szProcess.__repr__cCs |jSrA)rget_returncoder>rrr returncodeszProcess.returncodecs|jIdHS)z?Wait until the process exit and return the process return code.N)r_waitr>rrrwaitsz Process.waitcCs|j|dSrA)r send_signal)rsignalrrrrRszProcess.send_signalcCs|jdSrA)r terminater>rrrrTszProcess.terminatecCs|jdSrA)rkillr>rrrrUsz 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 debugr@drainBrokenPipeErrorConnectionResetErrorr4)rinputrXr;rrr _feed_stdins   $ zProcess._feed_stdincsdSrArr>rrr_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*rrrrVr rXreadr4)rr1r.rBnameoutputrrr _read_streams    zProcess._read_streamNcs|dur||}n|}|jdur2|d}n|}|jdurP|d}n|}tj||||jdIdH\}}}|IdH||fS)Nrr'r ) r]r^rrbrrgatherrrQ)rr\rrrrrr communicates      zProcess.communicate)N)r rDrErr%propertyrOrQrRrTrUr]r^rbrdrrrrrHts  rHc 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_loopwarningswarnDeprecationWarningsubprocess_shellrH) cmdrrrr rkwdsprotocol_factoryr.r(rr&rrs" r)rrrr rc shdurtntjdtddfdd}j||g|R|||d|IdH\} } t| | S)Nrfr'rgcs tdSrirjrr&rrrksz(create_subprocess_exec..rl)rrmrnrorpsubprocess_execrH) programrrrr rargsrsrtr.r(rr&rrs& r)__all__ subprocessrnrrrrlogr PIPESTDOUTDEVNULLFlowControlMixinSubprocessProtocolr rH_DEFAULT_LIMITrrrrrrs*     bV