
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \›  ã               @   s’   d Z ddlmZ ddlZddlZdddgZdZdZdZdZd	d„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zeefdd„Zeefdd„ZdS )zPseudo terminal utilities.é    )ÚselectNÚopenptyÚforkÚspawné   é   c              C   s<   yt jƒ S  ttfk
r    Y nX tƒ \} }t|ƒ}| |fS )zdopenpty() -> (master_fd, slave_fd)
    Open a pty master/slave pair, using os.openpty() if possible.)Úosr   ÚAttributeErrorÚOSErrorÚ_open_terminalÚ
slave_open)Ú	master_fdÚ
slave_nameÚslave_fd© r   ú/usr/lib64/python3.6/pty.pyr      s    
c              C   sL   yt jƒ \} }W n ttfk
r(   Y nX t j|ƒ}t j|ƒ | |fS tƒ S )z›master_open() -> (master_fd, slave_name)
    Open a pty master and return the fd, and the filename of the slave end.
    Deprecated, use openpty() instead.)r   r   r	   r
   ÚttynameÚcloser   )r   r   r   r   r   r   Úmaster_open!   s    

r   c              C   sl   x^dD ]V} xPdD ]H}d|  | }yt j|t jƒ}W n tk
rH   wY nX |d|  | fS W qW tdƒ‚dS )z1Open pty master and return (master_fd, tty_name).ZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devicesN)r   ÚopenÚO_RDWRr
   )ÚxÚyZpty_nameÚfdr   r   r   r   1   s    

r   c             C   sn   t j| t jƒ}yddlm}m} W n tk
r6   |S X y|||dƒ |||dƒ W n tk
rh   Y nX |S )z©slave_open(tty_name) -> slave_fd
    Open the pty slave and acquire the controlling terminal, returning
    opened filedescriptor.
    Deprecated, use openpty() instead.r   )ÚioctlÚI_PUSHZptemZldterm)r   r   r   Zfcntlr   r   ÚImportErrorr
   )Ztty_nameÚresultr   r   r   r   r   r   =   s    r   c              C   sð   yt jƒ \} }W n ttfk
r(   Y n4X | tkrTyt jƒ  W n tk
rR   Y nX | |fS tƒ \}}t jƒ } | tkrÞt jƒ  t j|ƒ t j	|t
ƒ t j	|tƒ t j	|tƒ |tkr¾t j|ƒ t jt jtƒt jƒ}t j|ƒ n
t j|ƒ | |fS )zdfork() -> (pid, master_fd)
    Fork and make the child a session leader with a controlling terminal.)r   Úforkptyr	   r
   ÚCHILDÚsetsidr   r   r   Údup2ÚSTDIN_FILENOÚSTDOUT_FILENOÚSTDERR_FILENOr   r   r   )Úpidr   r   r   Ztmp_fdr   r   r   r   O   s0    



c             C   s&   x |r t j| |ƒ}||d… }qW dS )z#Write all the data to a descriptor.N)r   Úwrite)r   ÚdataÚnr   r   r   Ú_writenw   s    r)   c             C   s   t j| dƒS )zDefault read function.i   )r   Úread)r   r   r   r   Ú_read}   s    r+   c             C   sz   | t g}xlt|g g ƒ\}}}| |krH|| ƒ}|s<|j| ƒ ntjt|ƒ t |kr
|t ƒ}|sh|jt ƒ q
t| |ƒ q
W dS )z�Parent copy loop.
    Copies
            pty master -> standard output   (master_read)
            standard input -> pty master    (stdin_read)N)r"   r   Úremover   r&   r#   r)   )r   Úmaster_readÚ
stdin_readZfdsZrfdsZwfdsZxfdsr'   r   r   r   Ú_copy�   s    r/   c             C   sÈ   t | ƒt dƒkr| f} tƒ \}}|tkr<tj| d f| žŽ  ytjtƒ}tjtƒ d}W n tj	k
rr   d}Y nX yt
|||ƒ W n( tk
r¬   |r¨tjttj|ƒ Y nX tj|ƒ tj|dƒd S )zCreate a spawned process.Ú r   r   )Útyper   r   r   ÚexeclpÚttyZ	tcgetattrr"   ZsetrawÚerrorr/   r
   Z	tcsetattrZ	TCSAFLUSHr   Úwaitpid)Úargvr-   r.   r%   r   ÚmodeZrestorer   r   r   r   –   s$    




)Ú__doc__r   r   r3   Ú__all__r"   r#   r$   r   r   r   r   r   r   r)   r+   r/   r   r   r   r   r   Ú<module>   s"   
(