U e5d‹"ã@sxddlZddlZddlZddlmZddlmZddlmZGdd„dejƒZ Gdd „d ej ƒZ Gd d „d e ej ƒZ dS) éNé)Ú protocols)Ú transports)ÚloggercsÔeZdZd0‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z e j fdd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Z‡ZS)1ÚBaseSubprocessTransportNc s&tƒ | ¡d|_||_||_d|_d|_d|_g|_t   ¡|_ i|_ d|_ |tjkr`d|j d<|tjkrtd|j d<|tjkrˆd|j d<z"|jf||||||dœ| —ŽWn| ¡‚YnX|jj|_|j|jd<|j ¡�rt|ttfƒrø|} n|d} t d| |j¡|j | | ¡¡dS)NFrré)ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizeÚ subprocesszprocess %r created: pid %s)ÚsuperÚ__init__Ú_closedÚ _protocolÚ_loopÚ_procÚ_pidÚ _returncodeÚ _exit_waitersÚ collectionsÚdequeÚ_pending_callsÚ_pipesÚ _finishedrÚPIPEÚ_startÚcloseÚpidZ_extraÚ get_debugÚ isinstanceÚbytesÚstrrÚdebugZ create_taskÚ_connect_pipes) ÚselfÚloopÚprotocolrr r r r r ÚwaiterZextraÚkwargsZprogram©Ú __class__©ú//usr/lib64/python3.8/asyncio/base_subprocess.pyr sL        ÿÿ    ÿz BaseSubprocessTransport.__init__cCs|jjg}|jr| d¡|jdk r6| d|j›�¡|jdk rT| d|j›�¡n |jdk rj| d¡n | d¡|j d¡}|dk rš| d|j›�¡|j d¡}|j d ¡}|dk rÖ||krÖ| d |j›�¡n6|dk rð| d |j›�¡|dk �r | d |j›�¡d   d  |¡¡S)NÚclosedzpid=z returncode=Zrunningz not startedrzstdin=rrzstdout=stderr=zstdout=zstderr=z<{}>ú ) r-Ú__name__rÚappendrrrÚgetÚpipeÚformatÚjoin)r'Úinfor r r r.r.r/Ú__repr__7s,           z BaseSubprocessTransport.__repr__cKst‚dS©N)ÚNotImplementedError)r'rr r r r r r+r.r.r/rTszBaseSubprocessTransport._startcCs ||_dSr:©r)r'r)r.r.r/Ú set_protocolWsz$BaseSubprocessTransport.set_protocolcCs|jSr:r<©r'r.r.r/Ú get_protocolZsz$BaseSubprocessTransport.get_protocolcCs|jSr:)rr>r.r.r/Ú is_closing]sz"BaseSubprocessTransport.is_closingcCs”|jr dSd|_|j ¡D]}|dkr(q|j ¡q|jdk r�|jdkr�|j ¡dkr�|j  ¡rlt   d|¡z|j  ¡Wnt k rŽYnXdS)NTz$Close running child process: kill %r)rrÚvaluesr5rrrZpollrr!rZwarningÚkillÚProcessLookupError)r'Úprotor.r.r/r`s$  þ û  zBaseSubprocessTransport.closecCs&|js"|d|›�t|d�| ¡dS)Nzunclosed transport )Úsource)rÚResourceWarningr)r'Z_warnr.r.r/Ú__del__{szBaseSubprocessTransport.__del__cCs|jSr:)rr>r.r.r/Úget_pid€szBaseSubprocessTransport.get_pidcCs|jSr:)rr>r.r.r/Úget_returncodeƒsz&BaseSubprocessTransport.get_returncodecCs||jkr|j|jSdSdSr:)rr5)r'Úfdr.r.r/Úget_pipe_transport†s  z*BaseSubprocessTransport.get_pipe_transportcCs|jdkrtƒ‚dSr:)rrCr>r.r.r/Ú _check_procŒs z#BaseSubprocessTransport._check_proccCs| ¡|j |¡dSr:)rLrÚ send_signal)r'Úsignalr.r.r/rM�sz#BaseSubprocessTransport.send_signalcCs| ¡|j ¡dSr:)rLrÚ terminater>r.r.r/rO”sz!BaseSubprocessTransport.terminatecCs| ¡|j ¡dSr:)rLrrBr>r.r.r/rB˜szBaseSubprocessTransport.killc ƒs`zâˆj}ˆj}|jdk rB| ‡fdd„|j¡IdH\}}|ˆjd<|jdk rv| ‡fdd„|j¡IdH\}}|ˆjd<|jdk rª| ‡fdd„|j¡IdH\}}|ˆjd<| ˆj j ˆ¡ˆj D]\}}|j|f|žŽqÀdˆ_ WnZt t fk rü‚Yn`tk �r<}z"|dk �r,| ¡�s,| |¡W5d}~XYn X|dk �r\| ¡�s\| d¡dS)Ncs tˆdƒS)Nr)ÚWriteSubprocessPipeProtor.r>r.r/Ú£óz8BaseSubprocessTransport._connect_pipes..rcs tˆdƒS)Nr©ÚReadSubprocessPipeProtor.r>r.r/rQ©rRrcs tˆdƒS)NrrSr.r>r.r/rQ¯rRr)rrr Zconnect_write_piperr Zconnect_read_piper Ú call_soonrÚconnection_maderÚ SystemExitÚKeyboardInterruptÚ BaseExceptionÚ cancelledZ set_exceptionÚ set_result) r'r*Úprocr(Ú_r5ÚcallbackÚdataÚexcr.r>r/r&œs@  þ   þ   þ  z&BaseSubprocessTransport._connect_pipescGs2|jdk r|j ||f¡n|jj|f|žŽdSr:)rr3rrU)r'Úcbr_r.r.r/Ú_callÂs zBaseSubprocessTransport._callcCs| |jj||¡| ¡dSr:)rbrZpipe_connection_lostÚ _try_finish)r'rJr`r.r.r/Ú_pipe_connection_lostÈsz-BaseSubprocessTransport._pipe_connection_lostcCs| |jj||¡dSr:)rbrZpipe_data_received)r'rJr_r.r.r/Ú_pipe_data_receivedÌsz+BaseSubprocessTransport._pipe_data_receivedcCsp|j ¡rt d||¡||_|jjdkr2||j_| |jj ¡|  ¡|j D]}|  ¡sN|  |¡qNd|_ dS)Nz%r exited with return code %r)rr!rr8rrÚ returncoderbrZprocess_exitedrcrrZr[)r'rfr*r.r.r/Ú_process_exitedÏs    z'BaseSubprocessTransport._process_exitedcÃs0|jdk r|jS|j ¡}|j |¡|IdHS)zdWait until the process exit and return the process return code. This method is a coroutine.N)rrZ create_futurerr3)r'r*r.r.r/Ú_waitâs    zBaseSubprocessTransport._waitcCs>|jdkrdStdd„|j ¡Dƒƒr:d|_| |jd¡dS)Ncss|]}|dk o|jVqdSr:)Ú disconnected)Ú.0Úpr.r.r/Ú ñsÿz6BaseSubprocessTransport._try_finish..T)rÚallrrArrbÚ_call_connection_lostr>r.r.r/rcís ÿz#BaseSubprocessTransport._try_finishcCs*z|j |¡W5d|_d|_d|_XdSr:)rrrÚconnection_lost©r'r`r.r.r/rnös z-BaseSubprocessTransport._call_connection_lost)NN)r2Ú __module__Ú __qualname__rr9rr=r?r@rÚwarningsÚwarnrGrHrIrKrLrMrOrBr&rbrdrergrhrcrnÚ __classcell__r.r.r,r/r s2þ+&  rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rPcCs||_||_d|_d|_dS)NF)r\rJr5ri)r'r\rJr.r.r/rsz!WriteSubprocessPipeProto.__init__cCs ||_dSr:)r5)r'Z transportr.r.r/rVsz(WriteSubprocessPipeProto.connection_madecCs d|jj›d|j›d|j›d�S)Nú)r-r2rJr5r>r.r.r/r9 sz!WriteSubprocessPipeProto.__repr__cCs d|_|j |j|¡d|_dS)NT)rir\rdrJrpr.r.r/ro sz(WriteSubprocessPipeProto.connection_lostcCs|jj ¡dSr:)r\rÚ pause_writingr>r.r.r/rxsz&WriteSubprocessPipeProto.pause_writingcCs|jj ¡dSr:)r\rÚresume_writingr>r.r.r/rysz'WriteSubprocessPipeProto.resume_writingN) r2rqrrrrVr9rorxryr.r.r.r/rPÿs rPc@seZdZdd„ZdS)rTcCs|j |j|¡dSr:)r\rerJ)r'r_r.r.r/Ú data_receivedsz%ReadSubprocessPipeProto.data_receivedN)r2rqrrrzr.r.r.r/rTsrT)rrrsÚrrÚlogrZSubprocessTransportrZ BaseProtocolrPZProtocolrTr.r.r.r/Ús   v ÿ