U e5d� � @ s� d Z ddlmZ ddlZddlZddlZdddgZdZdZdZdZ d d� Z d d� Zdd � Zdd� Z dd� Zdd� Zdd� Zeefdd�Zeefdd�ZdS )zPseudo terminal utilities.� )�selectN�openpty�fork�spawn� � c C s> z t �� W S ttfk r" Y nX t� \} }t|�}| |fS )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.8/pty.pyr s c C sL zt �� \} }W n ttfk r( Y nX t �|�}t �|� | |fS 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 sn dD ]\} dD ]R}d| | }zt �|t j�}W n tk rF Y qY nX |d| | f S qtd��dS )z1Open pty master and return (master_fd, tty_name).ZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devicesN)r �open�O_RDWRr )�x�yZpty_name�fdr r r r 2 s r c C sr t �| t j�}zddlm}m} W n tk r: | Y S X z|||d� |||d� W n tk rl Y nX |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_PUSHZptemZldterm)r r r Zfcntlr r �ImportErrorr )Ztty_name�resultr r r r r r > s r c C s� zt �� \} }W n ttfk r( Y n4X | tkrTzt �� W n tk rR Y nX | |fS t� \}}t �� } | tkr�t �� t �|� t � |t � t � |t� t � |t� |tkr�t �|� t � t �t�t j�}t �|� n t �|� | |fS )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 Ztmp_fdr r r r P s0 c C s" |rt �| |�}||d� }q dS )z#Write all the data to a descriptor.N)r �write)r �data�nr r r �_writenx s r) c C s t �| d�S )zDefault read function.i )r �read)r r r r �_read~ s r+ c C sv | t g}t|g g �\}}}| |krF|| �}|s:|�| � nt�t|� t |kr|t �}|sf|�t � qt| |� qdS )z�Parent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)N)r" r �remover r&