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 spzj}j}|jdk rB|fdd|jIdH\}}|jd<|jdk rv|fdd|jIdH\}}|jd<|jdk r|fdd|jIdH\}}|jd<jdk st | j j jD]\}}|j |f|qd_Wn\t tfk r Yn`tk rL}z"|dk r<|s<||W5d}~XYn X|dk rl|sl|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 rAssertionError call_soonrconnection_made SystemExitKeyboardInterrupt BaseException cancelledZ set_exception set_result) r'r*procr(_r5callbackdataexcr.r>r/r&sB          z&BaseSubprocessTransport._connect_pipescGs2|jdk r|j||fn|jj|f|dSr:)rr3rrV)r'cbr`r.r.r/_calls zBaseSubprocessTransport._callcCs||jj|||dSr:)rcrZpipe_connection_lost _try_finish)r'rJrar.r.r/_pipe_connection_lostsz-BaseSubprocessTransport._pipe_connection_lostcCs||jj||dSr:)rcrZpipe_data_received)r'rJr`r.r.r/_pipe_data_receivedsz+BaseSubprocessTransport._pipe_data_receivedcCs|dk st||jdks$t|j|jrsz6BaseSubprocessTransport._try_finish..T)rrUrallrrArc_call_connection_lostr>r.r.r/rds  z#BaseSubprocessTransport._try_finishcCs*z|j|W5d|_d|_d|_XdSr:)rrrconnection_lostr'rar.r.r/ros z-BaseSubprocessTransport._call_connection_lost)NN)r2 __module__ __qualname__rr9rr=r?r@rwarningswarnrGrHrIrKrLrMrOrBr&rcrerfrhrirdro __classcell__r.r.r,r/r s2+&  rc@s<eZdZddZddZddZddZd d Zd d Zd S)rPcCs||_||_d|_d|_dS)NF)r]rJr5rj)r'r]rJr.r.r/rsz!WriteSubprocessPipeProto.__init__cCs ||_dSr:)r5)r'Z transportr.r.r/rWsz(WriteSubprocessPipeProto.connection_madecCs d|jjd|jd|jdS)N)r-r2rJr5r>r.r.r/r9 sz!WriteSubprocessPipeProto.__repr__cCs d|_|j|j|d|_dS)NT)rjr]rerJrqr.r.r/rp sz(WriteSubprocessPipeProto.connection_lostcCs|jjdSr:)r]r pause_writingr>r.r.r/rysz&WriteSubprocessPipeProto.pause_writingcCs|jjdSr:)r]rresume_writingr>r.r.r/rzsz'WriteSubprocessPipeProto.resume_writingN) r2rrrsrrWr9rpryrzr.r.r.r/rPs rPc@seZdZddZdS)rTcCs|j|j|dSr:)r]rfrJ)r'r`r.r.r/ data_receivedsz%ReadSubprocessPipeProto.data_receivedN)r2rrrsr{r.r.r.r/rTsrT)rrrtrrlogrZSubprocessTransportrZ BaseProtocolrPZProtocolrTr.r.r.r/s   v