U if"@sxddlZddlZddlZddlmZddlmZddlmZGdddejZ Gdd d ej Z Gd d d e ej Z dS) N) protocols) transports)loggercseZdZd0fdd ZddZddZdd Zd d Zd d ZddZ e j fddZ ddZ ddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/ZZS)1BaseSubprocessTransportNc s&t| d|_||_||_d|_d|_d|_g|_t |_ i|_ d|_ |tjkr`d|j d<|tjkrtd|j d<|tjkrd|j d<z"|jf||||||d| Wn|YnX|jj|_|j|jd<|jrt|ttfr|} n|d} td| |j|j|| dS)NFrr)argsshellstdinstdoutstderrbufsize subprocesszprocess %r created: pid %s)super__init___closed _protocol_loop_proc_pid _returncode _exit_waiters collectionsdeque_pending_calls_pipes _finishedrPIPE_startclosepidZ_extra get_debug isinstancebytesstrrdebugZ create_task_connect_pipes) selfloopprotocolrr r r r r waiterZextrakwargsZprogram __class__ ) r-__name__rappendrrrgetpipeformatjoin)r'infor r r r.r.r/__repr__7s,           z BaseSubprocessTransport.__repr__cKstdSN)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|_|jD]}|dkr(q|jq|jdk r|jdkr|jdkr|j rlt d|z|j Wnt k rYnXdS)NTz$Close running child process: kill %r)rrvaluesr5rrrZpollrr!rZwarningkillProcessLookupError)r'protor.r.r/r`s$     zBaseSubprocessTransport.closecCs&|js"|d|t|d|dS)Nzunclosed transport )source)rResourceWarningr)r'Z_warnr.r.r/__del__{szBaseSubprocessTransport.__del__cCs|jSr:)rr>r.r.r/get_pidszBaseSubprocessTransport.get_pidcCs|jSr:)rr>r.r.r/get_returncodesz&BaseSubprocessTransport.get_returncodecCs||jkr|j|jSdSdSr:)rr5)r'fdr.r.r/get_pipe_transports  z*BaseSubprocessTransport.get_pipe_transportcCs|jdkrtdSr:)rrCr>r.r.r/ _check_procs z#BaseSubprocessTransport._check_proccCs||j|dSr:)rLr send_signal)r'signalr.r.r/rMsz#BaseSubprocessTransport.send_signalcCs||jdSr:)rLr terminater>r.r.r/rOsz!BaseSubprocessTransport.terminatecCs||jdSr:)rLrrBr>r.r.r/rBszBaseSubprocessTransport.killc s`zj}j}|jdk rB|fdd|jIdH\}}|jd<|jdk rv|fdd|jIdH\}}|jd<|jdk r|fdd|jIdH\}}|jd<|j j j D]\}}|j|f|qd_ WnZt t fk rYn`tk r<}z"|dk r,|s,||W5d}~XYn X|dk r\|s\|ddS)Ncs tdS)Nr)WriteSubprocessPipeProtor.r>r.r/z8BaseSubprocessTransport._connect_pipes..rcs tdS)NrReadSubprocessPipeProtor.r>r.r/rQrRrcs tdS)NrrSr.r>r.r/rQrRr)rrr Zconnect_write_piperr Zconnect_read_piper call_soonrconnection_mader SystemExitKeyboardInterrupt BaseException cancelledZ set_exception set_result) r'r*procr(_r5callbackdataexcr.r>r/r&s@          z&BaseSubprocessTransport._connect_pipescGs2|jdk r|j||fn|jj|f|dSr:)rr3rrU)r'cbr_r.r.r/_calls zBaseSubprocessTransport._callcCs||jj|||dSr:)rbrZpipe_connection_lost _try_finish)r'rJr`r.r.r/_pipe_connection_lostsz-BaseSubprocessTransport._pipe_connection_lostcCs||jj||dSr:)rbrZpipe_data_received)r'rJr_r.r.r/_pipe_data_receivedsz+BaseSubprocessTransport._pipe_data_receivedcCsp|jrtd||||_|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_exiteds    z'BaseSubprocessTransport._process_exitedcs0|jdk r|jS|j}|j||IdHSr:)rrZ create_futurerr3)r'r*r.r.r/_waits    zBaseSubprocessTransport._waitcCs>|jdkrdStdd|jDr:d|_||jddS)Ncss|]}|dk o|jVqdSr:) disconnected).0pr.r.r/ sz6BaseSubprocessTransport._try_finish..T)rallrrArrb_call_connection_lostr>r.r.r/rcs z#BaseSubprocessTransport._try_finishcCs*z|j|W5d|_d|_d|_XdSr:)rrrconnection_lostr'r`r.r.r/rns z-BaseSubprocessTransport._call_connection_lost)NN)r2 __module__ __qualname__rr9rr=r?r@rwarningswarnrGrHrIrKrLrMrOrBr&rbrdrergrhrcrn __classcell__r.r.r,r/r s2+&  rc@s<eZdZddZddZddZddZd 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|jjd|jd|jdS)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|jjdSr:)r\r pause_writingr>r.r.r/rxsz&WriteSubprocessPipeProto.pause_writingcCs|jjdSr:)r\rresume_writingr>r.r.r/rysz'WriteSubprocessPipeProto.resume_writingN) r2rqrrrrVr9rorxryr.r.r.r/rPs rPc@seZdZddZdS)rTcCs|j|j|dSr:)r\rerJ)r'r_r.r.r/ data_receivedsz%ReadSubprocessPipeProto.data_receivedN)r2rqrrrzr.r.r.r/rTsrT)rrrsrrlogrZSubprocessTransportrZ BaseProtocolrPZProtocolrTr.r.r.r/s   v