U e5d� � @ s� d dl m Z d dlZd dlZd dlZdddgZd ZdZdZd Zdd� Z d d � Z dd� Zd d� Zdd� Z dd� Zdd� Zeefdd�Zeefdd�ZdS )� )�selectN�openpty�fork�spawn� � c C s> z t �� W S ttfk r" Y nX t� \} }t|�}| |fS �N)�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 r )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��d S )NZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)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 )Nr )�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 r )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 d S r )r �write)r �data�nr r r �_writenx s r* c C s t �| d�S )Ni )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| |� qd S r )r# r �remover r' r$ r* )r �master_read� stdin_readZfdsZrfdsZwfdsZxfdsr( r r r �_copy� s r0 c C s� t | �t d�kr| f} t�d| � t� \}}|tkrHtj| d f| �� zt�t �}t� t � d}W n tjk r~ d}Y nX zt|||� W n( t k r� |r�t�t tj|� Y nX t�|� t�|d�d S )N� z pty.spawnr r )�type�sys�auditr r r �execlp�ttyZ tcgetattrr# Zsetraw�errorr0 r Z tcsetattrZ TCSAFLUSHr �waitpid)�argvr. r/ r&