e f @ 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 d d Z e e d d Z d S)zPseudo terminal utilities. )selectNopenptyforkspawn c C sN y t j SWn t t f k r( Yn Xt \ } } t | } | | f S)zdopenpty() -> (master_fd, slave_fd) Open a pty master/slave pair, using os.openpty() if possible.)osr AttributeErrorOSError_open_terminal slave_open) master_fd slave_nameslave_fd r (/opt/alt/python34/lib64/python3.4/pty.pyr s c C s^ y t j \ } } Wn t t f k r0 Yn' Xt j | } t j | | | f St S)zmaster_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 ttynamecloser )r r r r r r master_open! s r c C s xm d D]e } x\ d D]T } d | | } y t j | t j } Wn t k rX w Yn X| d | | f SWq Wt d d S)z1Open pty master and return (master_fd, tty_name).ZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devicesN)r openO_RDWRr )xyZpty_namefdr r r r 1 s r c C s t j | t j } y d d l m } m } Wn t k rG | SYn Xy$ | | | d | | | d Wn t k r Yn X| S)zslave_open(tty_name) -> slave_fd Open the pty slave and acquire the controlling terminal, returning opened filedescriptor. Deprecated, use openpty() instead.r )ioctlI_PUSHZptemZldterm)r r r Zfcntlr r ImportErrorr )Ztty_nameresultr r r r r r = s r c C s< y t j \ } } Wn t t f k r0 Yn= X| t k rc y t j Wqc t k r_ Yqc Xn | | f St \ } } t j } | t k r%t j t j | t j | t t j | t t j | t | t k r t j | n 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 CHILDsetsidr r r dup2STDIN_FILENO STDOUT_FILENO STDERR_FILENOr r r )pidr r r Ztmp_fdr r r r O s0 c C s3 x, | r. t j | | } | | d } q Wd S)z#Write all the data to a descriptor.N)r write)r datanr r r _writenw s r) c C s t j | d S)zDefault read function.i )r read)r r r r _read} s r+ c C s | t g } x t | g g \ } } } | | k rk | | } | sX | j | qk t j t | n t | k r | t } | s | j t q t | | q q Wd S)zParent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)N)r" r remover r&