й¼]Êã @s ddgZddlZddlmZddlmZddlmZddlmZdd lmZdd l m Z ej Z ej Z ej Z Gd d „d ejejƒZGd d„dƒZeddddejdd„ƒZedddddddddejdd„ƒZdS)Úcreate_subprocess_execÚcreate_subprocess_shelléNé)Úevents)Ú protocols)Ústreams)Útasks)Ú coroutine)ÚloggercsjeZdZ‡fdd†Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ‡S)ÚSubprocessStreamProtocolcsRtƒjd|ƒ||_d|_|_|_d|_d|_g|_dS)NÚloopF) ÚsuperÚ__init__Ú_limitÚstdinÚstdoutÚstderrÚ _transportÚ_process_exitedÚ _pipe_fds)ÚselfÚlimitr )Ú __class__©ú//opt/alt/python35/lib64/python3.5/subprocess.pyrs    z!SubprocessStreamProtocol.__init__cCs‰|jjg}|jdk r2|jd|jƒ|jdk rU|jd|jƒ|jdk rx|jd|jƒddj|ƒS)Nzstdin=%rz stdout=%rz stderr=%rz<%s>ú )rÚ__name__rÚappendrrÚjoin)rÚinforrrÚ__repr__sz!SubprocessStreamProtocol.__repr__cCs||_|jdƒ}|dk retjd|jd|jƒ|_|jj|ƒ|jj dƒ|jdƒ}|dk rÁtjd|jd|jƒ|_ |j j|ƒ|jj dƒ|jdƒ}|dk rtj |d|ddd|jƒ|_ dS)Nrrr érÚprotocolÚreader) rÚget_pipe_transportrÚ StreamReaderrÚ_looprZ set_transportrrrÚ StreamWriterr)rÚ transportZstdout_transportZstderr_transportZstdin_transportrrrÚconnection_made(s&     z(SubprocessStreamProtocol.connection_madecCsS|dkr|j}n|dkr0|j}nd}|dk rO|j|ƒdS)Nrr!)rrZ feed_data)rÚfdÚdatar#rrrÚpipe_data_received@s     z+SubprocessStreamProtocol.pipe_data_receivedcCsÑ|dkr<|j}|dk r+|jƒ|j|ƒdS|dkrT|j}n|dkrl|j}nd}|dkr¤|dkr—|jƒn |j|ƒ||jkrÃ|jj|ƒ|j ƒdS)Nrrr!) rÚcloseZconnection_lostrrZfeed_eofÚ set_exceptionrÚremoveÚ_maybe_close_transport)rr*ÚexcÚpiper#rrrÚpipe_connection_lostJs$             z-SubprocessStreamProtocol.pipe_connection_lostcCsd|_|jƒdS)NT)rr0)rrrrÚprocess_exitedas z'SubprocessStreamProtocol.process_exitedcCs8t|jƒdkr4|jr4|jjƒd|_dS)Nr)Úlenrrrr-)rrrrr0es z/SubprocessStreamProtocol._maybe_close_transport) rÚ __module__Ú __qualname__rr r)r,r3r4r0rr)rrr s    r c@s»eZdZdd„Zdd„Zedd„ƒZedd„ƒZd d „Z d d „Z d d„Z edd„ƒZ edd„ƒZ edd„ƒZeddd„ƒZdS)ÚProcesscCsR||_||_||_|j|_|j|_|j|_|jƒ|_dS)N)rZ _protocolr&rrrZget_pidÚpid)rr(r"r rrrrls      zProcess.__init__cCsd|jj|jfS)Nz<%s %s>)rrr9)rrrrr uszProcess.__repr__cCs |jjƒS)N)rZget_returncode)rrrrÚ returncodexszProcess.returncodeccs|jjƒEdHS)N)rÚ_wait)rrrrÚwait|sz Process.waitcCs|jj|ƒdS)N)rÚ send_signal)rÚsignalrrrr=ƒszProcess.send_signalcCs|jjƒdS)N)rÚ terminate)rrrrr?†szProcess.terminatecCs|jjƒdS)N)rÚkill)rrrrr@‰sz Process.killccsÂ|jjƒ}|jj|ƒ|r>tjd|t|ƒƒy|jjƒEdHWnDtt fk rš}z|rˆtjd||ƒWYdd}~XnX|r±tjd|ƒ|jj ƒdS)Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin) r&Ú get_debugrÚwriter Údebugr5ZdrainÚBrokenPipeErrorÚConnectionResetErrorr-)rÚinputrCr1rrrÚ _feed_stdinŒs &zProcess._feed_stdincCsdS)Nr)rrrrÚ_noopžsz Process._noopccsÆ|jj|ƒ}|dkr*|j}n |j}|jjƒrm|dkrTdnd}tjd||ƒ|jƒEdH}|jjƒr¸|dkrŸdnd}tjd||ƒ|j ƒ|S)Nr!rrrz%r communicate: read %sz%r communicate: close %s) rr$rrr&rAr rCÚreadr-)rr*r(ÚstreamÚnameÚoutputrrrÚ _read_stream¢s    zProcess._read_streamNccsÉ|dk r|j|ƒ}n |jƒ}|jdk rK|jdƒ}n |jƒ}|jdk rx|jdƒ}n |jƒ}tj|||d|jƒEdH\}}}|jƒEdH||fS)Nrr!r ) rGrHrrMrrZgatherr&r<)rrFrrrrrrÚ communicate´s    zProcess.communicate)rr6r7rr Úpropertyr:r r<r=r?r@rGrHrMrNrrrrr8ks     r8c +soˆdkrtjƒ‰‡‡fdd†}ˆj||d|d|d||EdH\}} t|| ˆƒS)NcstdˆdˆƒS)Nrr )r r)rr rrÚÍs z)create_subprocess_shell..rrr)rÚget_event_loopZsubprocess_shellr8) Úcmdrrrr rÚkwdsÚprotocol_factoryr(r"r)rr rrÈs  rrrr rc /srˆdkrtjƒ‰‡‡fdd†}ˆj|||d|d|d||ŽEdH\} } t| | ˆƒS)NcstdˆdˆƒS)Nrr )r r)rr rrrPÛs z(create_subprocess_exec..rrr)rrQZsubprocess_execr8) Zprogramrrrr rÚargsrSrTr(r"r)rr rrÕs    )Ú__all__Ú subprocessÚrrrrZ coroutinesr Úlogr ÚPIPEÚSTDOUTÚDEVNULLZFlowControlMixinZSubprocessProtocolr r8Z_DEFAULT_LIMITrrrrrrÚs(      X]