j f @s ddgZddlZddlmZddlmZddlmZddlmZdd lmZdd l m Z ej Z ej Z ej Z Gd d d ejejZGd ddZeddddejddZedddddddddejddZdS)create_subprocess_execcreate_subprocess_shellN)events) protocols)streams)tasks) coroutine)loggercsdeZdZdZfddZddZddZdd Zd d Zd d Z S)SubprocessStreamProtocolz0Like StreamReaderProtocol, but for a subprocess.cs@tjd|||_d|_|_|_d|_dS)Nloop)super__init___limitstdinstdoutstderr _transport)selflimitr ) __class__7/opt/alt/python34/lib64/python3.4/asyncio/subprocess.pyrs z!SubprocessStreamProtocol.__init__cCs|jjg}|jdk r5|jd|jn|jdk r[|jd|jn|jdk r|jd|jnddj|S)Nzstdin=%rz stdout=%rz stderr=%rz<%s> )r__name__rappendrrjoin)rinforrr__repr__sz!SubprocessStreamProtocol.__repr__cCs||_|jd}|dk rXtjd|jd|j|_|jj|n|jd}|dk rtjd|jd|j|_|jj|n|jd}|dk rtj |d|ddd|j|_ ndS)Nrrr rprotocolreader) rget_pipe_transportr StreamReaderr_looprZ set_transportr StreamWriterr)r transportZstdout_transportZstderr_transportZstdin_transportrrrconnection_made&s"     z(SubprocessStreamProtocol.connection_madecCsV|dkr|j}n|dkr0|j}nd}|dk rR|j|ndS)Nrr)rrZ feed_data)rfddatar!rrrpipe_data_received<s     z+SubprocessStreamProtocol.pipe_data_receivedcCs|dkr?|j}|dk r.|jn|j|dS|dkrW|j}n|dkro|j}nd}|dkr|dkr|jq|j|ndS)Nrrr)rcloseZconnection_lostrrZfeed_eofZ set_exception)rr(excpiper!rrrpipe_connection_lostFs            z-SubprocessStreamProtocol.pipe_connection_lostcCs|jjd|_dS)N)rr+)rrrrprocess_exitedYs z'SubprocessStreamProtocol.process_exited) r __module__ __qualname____doc__rrr'r*r.r/rr)rrr s   r c@seZdZddZddZeddZeddZd d Z d d Z d dZ eddZ eddZ eddZedddZdS)ProcesscCsR||_||_||_|j|_|j|_|j|_|j|_dS)N)rZ _protocolr$rrrZget_pidpid)rr&r r rrrr_s      zProcess.__init__cCsd|jj|jfS)Nz<%s %s>)rrr4)rrrrrhszProcess.__repr__cCs |jjS)N)rZget_returncode)rrrr returncodekszProcess.returncodeccs|jjDdHS)zdWait until the process exit and return the process return code. This method is a coroutine.N)rZ_wait)rrrrwaitosz Process.waitcCs|jj|dS)N)r send_signal)rsignalrrrr7vszProcess.send_signalcCs|jjdS)N)r terminate)rrrrr9yszProcess.terminatecCs|jjdS)N)rkill)rrrrr:|sz Process.killccs|jj}|jj||rAtjd|t|ny|jjDdHWnGtt fk r}z!|rtjd||nWYdd}~XnX|rtjd|n|jj dS)Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin) r$ get_debugrwriter debuglenZdrainBrokenPipeErrorConnectionResetErrorr+)rinputr=r,rrr _feed_stdins )zProcess._feed_stdincCsdS)Nr)rrrr_noopsz Process._noopccs|jj|}|dkr*|j}n|dks<t|j}|jjr|dkrfdnd}tjd||n|j DdH}|jjr|dkrdnd}tjd||n|j |S)Nrrrrz%r communicate: read %sz%r communicate: close %s) rr"rAssertionErrorrr$r;r r=readr+)rr(r&streamnameoutputrrr _read_streams    zProcess._read_streamNccs|r|j|}n |j}|jdk rE|jd}n |j}|jdk rr|jd}n |j}tj|||d|jDdH\}}}|jDdH||fS)Nrrr ) rBrCrrIrrZgatherr$r6)rrArrrrrr communicates   zProcess.communicate)rr0r1rrpropertyr5r r6r7r9r:rBrCrIrJrrrrr3^s     r3c +srdkrtjnfdd}j||d|d|d||DdH\}} t|| S)NcstddS)Nrr )r r)rr rrs z)create_subprocess_shell..rrr)rget_event_loopZsubprocess_shellr3) cmdrrrr rkwdsprotocol_factoryr&r r)rr rrs rrrr rc /sudkrtjnfdd}j||d|d|d|||DdH\} } t| | S)NcstddS)Nrr )r r)rr rrrLs z(create_subprocess_exec..rrr)rrMZsubprocess_execr3) Zprogramrrrr rargsrOrPr&r r)rr rrs  )__all__ subprocessrrrrZ coroutinesr logr PIPEZSTDOUTZDEVNULLZFlowControlMixinZSubprocessProtocolr r3Z_DEFAULT_LIMITrrrrrrs(      K]