Ë
    ý¸e  ã                   ó¶   — d Z ddlZddlZddlZddlZddlZddlZddlZ	 ddlm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ  G d„ d	e«      Zy# e$ r ddl	m	Z	m
Z
 Y Œ/w xY w)
zJProvides an interface like pexpect.spawn interface using subprocess.Popen
é    N)ÚQueueÚEmptyé   )Ú	SpawnBaseÚPY3)ÚEOF)Ústring_typesc                   ób   ‡ — e Zd Z	 	 	 dˆ fd„	ZdZd„ Zd„ Zd„ Zd„ Zd„ Z	dd„Z
d	„ Zd
„ Zd„ Zˆ xZS )Ú
PopenSpawnc           	      ó  •— t         t        | �  ||||||	¬«       |€%t        j                  j                  d«      | _        n$| j                  t        j                  «      | _        t        dt        j                  t        j                  t        j                  ||
|¬«      }t        j                  dk(  rOt        j                  «       }|xj                  t        j                   z  c_        ||d<   t        j"                  |d<   t%        |t&        «      r;t        j                  dk7  r(t)        j*                  |t        j,                  dk(  ¬	«      }t        j.                  |fi |¤Ž| _        | j0                  j2                  | _        d
| _        | j                  «       | _        t9        «       | _        t=        j>                  | j@                  ¬«      | _!        d| jB                  _"        | jB                  jG                  «        y )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!   zPopenSpawn.__init__   s~  ø€ ô 	Œj˜$Ñ(°À'Ø!1¸7Ø!°ð 	)ô 	>ð ÐÜŸ
™
×)Ñ)¨7Ó3ˆD�Ià×(Ñ(¬"¯*©*Ó5ˆDŒIä˜a¤z§¡Ü'×.Ñ.´z·±Ø¨*¸#ô?ˆô �<‰<˜7Ò"Ü$×0Ñ0Ó2ˆKØ×Ò¤:×#BÑ#BÑBÕØ$/ˆF�=Ñ!Ü&0×&IÑ&IˆF�?Ñ#ä�cœ<Ô(¬S¯\©\¸WÒ-DÜ—+‘+˜c¬¯©°GÑ);Ô<ˆCä×$Ñ$ SÑ3¨FÑ3ˆŒ	Ø—9‘9—=‘=ˆŒØˆŒØ×$Ñ$Ó&ˆŒ	ä ›7ˆÔÜ%×,Ñ,°D×4GÑ4GÔHˆÔØ#'ˆ×ÑÔ Ø×Ñ×ÑÕ!ó    Fc                 óf  — | j                   }| j                  r#|r||d  | _         |d | S d| _        t        d«      ‚|dk(  r| j                  }n|€d}t        j
                  «       }t        j
                  «       |z
  |k  r€|r~t        |«      |k  rp	 | j                  j                  «       }|€d| _        nK|| j                  j                  |d¬«      z  }t        j
                  «       |z
  |k  r|rt        |«      |k  rŒp|d | ||d  c}| _         | j                  |d«       |S # t        $ r Y Œ/w xY w)NTzEnd Of File (EOF).éÿÿÿÿg    €„.AF©ÚfinalÚread)r9   Ú_read_reached_eofÚflag_eofr   r   ÚtimeÚlenr:   Ú
get_nowaitÚ_decoderÚdecoder   Ú_log)rA   Úsizer   ÚbufÚt0ÚincomingÚrs          rE   Úread_nonblockingzPopenSpawn.read_nonblockingA   s7  € Ø�i‰iˆØ×!Ò!ñ Ø  ˜J�”	Ø˜5˜D�zÐ!à $�”ÜÐ.Ó/Ð/à�bŠ=Ø—l‘l‰GØˆ_ØˆGä�Y‰Y‹[ˆÜ�y‰y‹{˜RÑ 7Ò*©t¼¸C»À4ºð	CØ×+Ñ+×6Ñ6Ó8�ð Ð#Ø-1�DÔ*Øà�t—}‘}×+Ñ+¨H¸EÐ+ÓBÑB�ô �y‰y‹{˜RÑ 7Ò*©t¼¸C»À4»ð ˜5˜D�z 3 t u :ˆˆˆ4Œ9à�	‰	�!�VÔØˆøô ò Ùðús   ÂD$ Ä$	D0Ä/D0c                 óB  — | j                   j                  j                  «       }	 d}	 t        j                  |d«      }|s| j                  j                  d«       y| j                  j                  |«       ŒS# t
        $ r}| j                  |d«       Y d}~ŒZd}~ww xY w)z6Run in a thread to move output from a pipe to a queue.rF   i   rK   N)	r6   r   Úfilenor"   rK   ÚOSErrorrS   r:   Úput)rA   r[   rU   Úes       rE   r=   zPopenSpawn._read_incomingd   s�   € à—‘×!Ñ!×(Ñ(Ó*ˆØØˆCð%Ü—g‘g˜f dÓ+�ñ à× Ñ ×$Ñ$ TÔ*Øà×Ñ× Ñ  Ô%ð øô ò %Ø—	‘	˜!˜V×$Ñ$ûð%ús   ©A9 Á9	BÂBÂBc                 ó&   — | j                  |«       y)zHThis is similar to send() except that there is no return value.
        N©Úsend)rA   Úss     rE   ÚwritezPopenSpawn.writeu   s   € ð 	�	‰	�!�rF   c                 ó4   — |D ]  }| j                  |«       Œ y)zëThis 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.
        Nr`   )rA   Úsequencerb   s      rE   Ú
writelineszPopenSpawn.writelinesz   s   € ð ò 	ˆAØ�I‰I�a�Lñ	rF   c                 ó8  — | j                  |«      }| j                  |d«       | j                  j                  |d¬«      }t        r%| j
                  j                  j                  |«      S | j
                  j                  j                  |«       t        |«      S )zZSend data to the subprocess' stdin.

        Returns the number of bytes written.
        ra   FrI   )	Ú_coerce_send_stringrS   Ú_encoderr$   r   r6   r   rc   rO   )rA   rb   Úbs      rE   ra   zPopenSpawn.send„   sx   € ð
 ×$Ñ$ QÓ'ˆØ�	‰	�!�VÔà�M‰M× Ñ  ¨%Ð Ó0ˆÝØ—9‘9—?‘?×(Ñ(¨Ó+Ð+ð �I‰I�O‰O×!Ñ! !Ô$Ü�q“6ˆMrF   c                 ó`   — | j                  |«      }|| j                  | j                  «      z   S )z†Wraps send(), sending string ``s`` to child process, with os.linesep
        automatically appended. Returns number of bytes written. )ra   r#   )rA   rb   Úns      rE   ÚsendlinezPopenSpawn.sendline•   s)   € ð �I‰I�a‹LˆØ�4—9‘9˜TŸ\™\Ó*Ñ*Ð*rF   c                 óŽ   — | j                   j                  «       }|dk\  r|| _        d| _        nd| _        | | _        d| _        |S )zKWait for the subprocess to finish.

        Returns the exit code.
        r   NT)r6   ÚwaitÚ
exitstatusÚsignalstatusÚ
terminated)rA   Ústatuss     rE   ro   zPopenSpawn.waitœ   sG   € ð
 —‘—‘Ó!ˆØ�QŠ;Ø$ˆDŒOØ $ˆDÕà"ˆDŒOØ!' ˆDÔØˆŒØˆrF   c                 ój  — t         j                  dk(  rv|t        j                  t        j                  fv rt        j                  }nC|t        j
                  t        j                  fv rt        j                  }nt        j                  }t        j                  | j                  j                  |«       y)z}Sends 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"   Úkillr6   r7   )rA   Úsigs     rE   r{   zPopenSpawn.kill«   ss   € ô
 �<‰<˜7Ò"Ø”v—}‘}¤f×&9Ñ&9Ð:Ñ:Ü×)Ñ)‘ØœŸ™¬&×*AÑ*AÐBÑBÜ×-Ñ-‘ä—n‘n�ä
�‰�—	‘	—‘˜sÕ#rF   c                 óL   — | j                   j                  j                  «        y)z+Closes the stdin pipe from the writing end.N)r6   r   Úclose)rA   s    rE   ÚsendeofzPopenSpawn.sendeofº   s   € à�	‰	�‰×ÑÕrF   )	é   iÐ  NNNNNÚstrictN)Ú )Ú__name__Ú
__module__Ú__qualname__r!   rL   rY   r=   rc   rf   ra   rm   ro   r{   r   Ú__classcell__)rD   s   @rE   r   r      sH   ø„ ØGKØ<@Ø37õ("ðT Ðò!òF&ò"ò
òó"+òò$ö rF   r   )Ú__doc__r"   r;   r(   r+   rN   ru   r2   Úqueuer   r   ÚImportErrorÚ	spawnbaser   r   Ú
exceptionsr   Úutilsr	   r   © rF   rE   ú<module>rŽ      sW   ðñã 	Û Û Û 
Û Û Û ð#ß"÷ &Ý Ý ôh �õ h øð ò #ß"Ñ"ð#ús    A ÁAÁA