
    e                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKr SSKJ	r	J
r
  SSKJrJr  SSKJr  SSKJr   " S S	\5      rg! \ a    SSK	J	r	J
r
   N0f = f)
zJProvides an interface like pexpect.spawn interface using subprocess.Popen
    N)QueueEmpty   )	SpawnBasePY3)EOF)string_typesc                   p   ^  \ rS rSr   SU 4S jjrSrS rS rS rS r	S r
SS	 jrS
 rS rS rSrU =r$ )
PopenSpawn   c           
        > [         [        U ]  X#XEXS9  Uc%  [        R                  R                  S5      U l        O$U R                  [        R                  5      U l        [        S[        R                  [        R                  [        R                  XjUS9n[        R                  S:X  aO  [        R                  " 5       nU=R                  [        R                   -  sl        XS'   [        R"                  US'   [%        U[&        5      (       a:  [        R                  S:w  a&  [(        R*                  " U[        R,                  S:H  S	9n[        R.                  " U40 UD6U l        U R0                  R2                  U l        S
U l        U R                  5       U l        [9        5       U l        [<        R>                  " U R@                  S9U l!        SU RB                  l"        U RB                  RG                  5         g )N)timeoutmaxreadsearchwindowsizelogfileencodingcodec_errorsasciir   )bufsizestdinstderrstdoutcwd
preexec_fnenvwin32startupinfocreationflagsposix)r   F)targetT)$superr   __init__oslinesepencodecrlfstring_typedict
subprocessPIPESTDOUTsysplatformSTARTUPINFOdwFlagsSTARTF_USESHOWWINDOWCREATE_NEW_PROCESS_GROUP
isinstancer	   shlexsplitnamePopenprocpidclosed_bufr   _read_queue	threadingThread_read_incoming_read_threaddaemonstart)selfcmdr   r   r   r   r   r   r   r   r   kwargsr   	__class__s                5/usr/lib/python3/dist-packages/pexpect/popen_spawn.pyr"   PopenSpawn.__init__   sw    	j$(!1! 	) 	> 

))73DI(("**5DIaz'..z#? <<7"$002K:#B#BB$/=!&0&I&IF?#c<((S\\W-D++cG);<C$$S3F3	99==$$&	 7%,,D4G4GH#' !    Fc                    U R                   nU R                  (       a'  U(       a  X1S  U l         US U $ SU l        [        S5      eUS:X  a  U R                  nOUc  Sn[
        R
                  " 5       n[
        R
                  " 5       U-
  U:  a  U(       a  [        U5      U:  av   U R                  R                  5       nUc  SU l        OPX0R                  R                  USS9-  n[
        R
                  " 5       U-
  U:  a  U(       a  [        U5      U:  a  Mv  US U X1S  so`l         U R                  US5        U$ ! [         a     M/  f = f)NTzEnd Of File (EOF).g    .AFfinalread)r:   _read_reached_eofflag_eofr   r   timelenr;   
get_nowait_decoderdecoder   _log)rB   sizer   buft0incomingrs          rF   read_nonblockingPopenSpawn.read_nonblockingA   s/   ii!! J	5Dz! $.//b=llG_GYY[yy{R7*tC4	C++668 #-1D*}}++HE+BB yy{R7*tC4 5Dz3u:9		!V  s   %D< <
E
	E
c                 R   U R                   R                  R                  5       n Sn [        R                  " US5      nU(       d  U R                  R                  S5        gU R                  R                  U5        MZ  ! [
         a  nU R                  US5         SnANaSnAff = f)z6Run in a thread to move output from a pipe to a queue.rH   i   rM   N)	r7   r   filenor#   rM   OSErrorrU   r;   put)rB   r^   rW   es       rF   r>   PopenSpawn._read_incomingd   s    !!((*C%ggfd+   $$T*  %   %		!V$$%s   B   
B&
B!!B&c                 &    U R                  U5        g)zHThis is similar to send() except that there is no return value.
        Nsend)rB   ss     rF   writePopenSpawn.writeu   s     			!rH   c                 8    U H  nU R                  U5        M     g)zThis calls write() for each element in the sequence.

The sequence can be any iterable object producing strings, typically a
list of strings. This does not add line separators. There is no return
value.
Nrd   )rB   sequencerf   s      rF   
writelinesPopenSpawn.writelinesz   s     AIIaL rH   c                 <   U R                  U5      nU R                  US5        U R                  R                  USS9n[        (       a%  U R
                  R                  R                  U5      $ U R
                  R                  R                  U5        [        U5      $ )zJSend data to the subprocess' stdin.

Returns the number of bytes written.
re   FrK   )	_coerce_send_stringrU   _encoderr%   r   r7   r   rg   rQ   )rB   rf   bs      rF   re   PopenSpawn.send   sz    
 $$Q'		!VMM  % 0399??((++ IIOO!!!$q6MrH   c                 ^    U R                  U5      nX R                  U R                  5      -   $ )z~Wraps send(), sending string ``s`` to child process, with os.linesep
automatically appended. Returns number of bytes written. )re   r$   )rB   rf   ns      rF   sendlinePopenSpawn.sendline   s'     IIaL99T\\***rH   c                     U R                   R                  5       nUS:  a  Xl        SU l        OSU l        U* U l        SU l        U$ )z;Wait for the subprocess to finish.

Returns the exit code.
r   NT)r7   wait
exitstatussignalstatus
terminated)rB   statuss     rF   rw   PopenSpawn.wait   sE    
 !Q;$O $D"DO!'DrH   c                 v   [         R                  S:X  az  U[        R                  [        R                  4;   a  [        R                  nOEU[        R
                  [        R                  4;   a  [        R                  nO[        R                  n[        R                  " U R                  R                  U5        g)zmSends a Unix signal to the subprocess.

Use constants from the :mod:`signal` module to specify which signal.
r   N)r,   r-   signalSIGINTCTRL_C_EVENTSIGBREAKCTRL_BREAK_EVENTSIGTERMr#   killr7   r8   )rB   sigs     rF   r   PopenSpawn.kill   ss    
 <<7"v}}f&9&9::))&*A*ABB--nn
		s#rH   c                 L    U R                   R                  R                  5         g)z+Closes the stdin pipe from the writing end.N)r7   r   close)rB   s    rF   sendeofPopenSpawn.sendeof   s    		rH   )r:   r;   rN   r?   r9   r&   rx   rO   r8   r7   ry   rz   )	   i  NNNNNstrictN) )__name__
__module____qualname____firstlineno__r"   rN   r[   r>   rg   rk   re   rt   rw   r   r   __static_attributes____classcell__)rE   s   @rF   r   r      sM    GK<@37("T !F&"
"+$   rH   r   )__doc__r#   r<   r)   r,   rP   r~   r3   queuer   r   ImportError	spawnbaser   r   
exceptionsr   utilsr	   r    rH   rF   <module>r      sW    	   
   #" &  h  h   #""#s   A AA