3 \ˆ#ã@s�ddlZddlZddlZddlmZddlmZddlmZddlmZddl m Z Gdd „d ej ƒZ Gd d „d ej ƒZGd d „d eejƒZdS)éNé)Úcompat)Ú protocols)Ú transports)Ú coroutine)ÚloggercsÜeZdZd0‡fdd„ Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z e j rTdd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zed d!„ƒZd"d#„Zd$d%„Zd&d'„Zd(d)„Zed*d+„ƒZd,d-„Zd.d/„Z‡ZS)1ÚBaseSubprocessTransportNc  s&tƒj| ƒd|_||_||_d|_d|_d|_g|_t j ƒ|_ i|_ d|_ |tjkr`d|j d<|tjkrtd|j d<|tjkrˆd|j d<y"|jf||||||dœ| —ŽWn|jƒ‚YnX|jj|_|j|jd<|jjƒ�rt|ttfƒrø|} n|d} tjd| |jƒ|jj|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Úprotocolr r r r rrÚwaiterZextraÚkwargsZprogram)Ú __class__©ú//usr/lib64/python3.6/asyncio/base_subprocess.pyrs@            z BaseSubprocessTransport.__init__cCs |jjg}|jr|jdƒ|jdk r4|jd|jƒ|jdk rP|jd|jƒn |jdk rf|jdƒn |jdƒ|jjdƒ}|dk r”|jd|jƒ|jjdƒ}|jjd ƒ}|dk rÎ||krÎ|jd |jƒn0|dk ræ|jd |jƒ|dk rþ|jd |jƒd dj |ƒS)NÚclosedzpid=%sz returncode=%sZrunningz not startedrzstdin=%srr zstdout=stderr=%sz stdout=%sz stderr=%sz<%s>ú ) r.Ú__name__rÚappendrrrÚgetÚpipeÚjoin)r)Úinfor r rr/r/r0Ú__repr__9s,          z BaseSubprocessTransport.__repr__cKst‚dS)N)ÚNotImplementedError)r)r r r r rrr-r/r/r0r VszBaseSubprocessTransport._startcCs ||_dS)N)r)r)r+r/r/r0Ú set_protocolYsz$BaseSubprocessTransport.set_protocolcCs|jS)N)r)r)r/r/r0Ú get_protocol\sz$BaseSubprocessTransport.get_protocolcCs|jS)N)r)r)r/r/r0Ú is_closing_sz"BaseSubprocessTransport.is_closingc Cs˜|jr dSd|_x&|jjƒD]}|dkr*q|jjƒqW|jdk r”|jdkr”|jjƒdkr”|jj ƒrpt j d|ƒy|jj ƒWnt k r’YnXdS)NTz$Close running child process: kill %r)rrÚvaluesr6r!rrZpollrr#rZwarningÚkillÚProcessLookupError)r)Úprotor/r/r0r!bs     zBaseSubprocessTransport.closecCs&|js"tjd|t|d�|jƒdS)Nzunclosed transport %r)Úsource)rÚwarningsÚwarnÚResourceWarningr!)r)r/r/r0Ú__del__€s zBaseSubprocessTransport.__del__cCs|jS)N)r)r)r/r/r0Úget_pid†szBaseSubprocessTransport.get_pidcCs|jS)N)r)r)r/r/r0Úget_returncode‰sz&BaseSubprocessTransport.get_returncodecCs||jkr|j|jSdSdS)N)rr6)r)Úfdr/r/r0Úget_pipe_transportŒs  z*BaseSubprocessTransport.get_pipe_transportcCs|jdkrtƒ‚dS)N)rr@)r)r/r/r0Ú _check_proc’s z#BaseSubprocessTransport._check_proccCs|jƒ|jj|ƒdS)N)rKrÚ send_signal)r)Úsignalr/r/r0rL–sz#BaseSubprocessTransport.send_signalcCs|jƒ|jjƒdS)N)rKrÚ terminate)r)r/r/r0rNšsz!BaseSubprocessTransport.terminatecCs|jƒ|jjƒdS)N)rKrr?)r)r/r/r0r?žszBaseSubprocessTransport.killc #s^yôˆj}ˆj}|jdk rB|j‡fdd„|jƒEdH\}}|ˆjd<|jdk rv|j‡fdd„|jƒEdH\}}|ˆjd<|jdk rª|j‡fdd„|jƒEdH\}}|ˆjd<ˆjdk s¸t ‚|j ˆj j ˆƒx"ˆjD]\}}|j |f|žŽqÐWdˆ_WnDt k �r8}z&|dk �r(|jƒ �r(|j|ƒWYdd}~Xn"X|dk �rZ|jƒ �rZ|jdƒdS)Ncs tˆdƒS)Nr)ÚWriteSubprocessPipeProtor/)r)r/r0Úªsz8BaseSubprocessTransport._connect_pipes..rcs tˆdƒS)Nr)ÚReadSubprocessPipeProtor/)r)r/r0rP°srcs tˆdƒS)Nr )rQr/)r)r/r0rP¶sr )rrr Zconnect_write_piperr Zconnect_read_piperrÚAssertionErrorÚ call_soonrÚconnection_madeÚ ExceptionÚ cancelledZ set_exceptionÚ set_result) r)r,Úprocr*Ú_r6ÚcallbackÚdataÚexcr/)r)r0r(¢s8          z&BaseSubprocessTransport._connect_pipescGs2|jdk r|jj||fƒn|jj|f|žŽdS)N)rr4rrS)r)Úcbr[r/r/r0Ú_callÇs zBaseSubprocessTransport._callcCs|j|jj||ƒ|jƒdS)N)r^rZpipe_connection_lostÚ _try_finish)r)rIr\r/r/r0Ú_pipe_connection_lostÍsz-BaseSubprocessTransport._pipe_connection_lostcCs|j|jj||ƒdS)N)r^rZpipe_data_received)r)rIr[r/r/r0Ú_pipe_data_receivedÑsz+BaseSubprocessTransport._pipe_data_receivedcCs˜|dk st|ƒ‚|jdks$t|jƒ‚|jjƒrøsz6BaseSubprocessTransport._try_finish..T)rrRrÚallrr>r^Ú_call_connection_lost)r)r/r/r0r_ôs  z#BaseSubprocessTransport._try_finishc Cs*z|jj|ƒWdd|_d|_d|_XdS)N)rÚconnection_lostrr)r)r\r/r/r0rjýs z-BaseSubprocessTransport._call_connection_lost)NN)r3Ú __module__Ú __qualname__rr9r r;r<r=r!rZPY34rFrGrHrJrKrLrNr?rr(r^r`rarcrdr_rjÚ __classcell__r/r/)r.r0r s0) %  rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rOcCs||_||_d|_d|_dS)NF)rXrIr6re)r)rXrIr/r/r0rsz!WriteSubprocessPipeProto.__init__cCs ||_dS)N)r6)r)Z transportr/r/r0rTsz(WriteSubprocessPipeProto.connection_madecCsd|jj|j|jfS)Nz<%s fd=%s pipe=%r>)r.r3rIr6)r)r/r/r0r9sz!WriteSubprocessPipeProto.__repr__cCs d|_|jj|j|ƒd|_dS)NT)rerXr`rI)r)r\r/r/r0rksz(WriteSubprocessPipeProto.connection_lostcCs|jjjƒdS)N)rXrÚ pause_writing)r)r/r/r0rosz&WriteSubprocessPipeProto.pause_writingcCs|jjjƒdS)N)rXrÚresume_writing)r)r/r/r0rpsz'WriteSubprocessPipeProto.resume_writingN) r3rlrmrrTr9rkrorpr/r/r/r0rOs rOc@seZdZdd„ZdS)rQcCs|jj|j|ƒdS)N)rXrarI)r)r[r/r/r0Ú data_received$sz%ReadSubprocessPipeProto.data_receivedN)r3rlrmrqr/r/r/r0rQ!srQ)rrrCÚrrrZ coroutinesrÚlogrZSubprocessTransportrZ BaseProtocolrOZProtocolrQr/r/r/r0Ús     {