î 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.é )ÚselectNÚopenptyÚforkÚspawné é 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 ÚAttributeErrorÚOSErrorÚ_open_terminalÚ slave_open)Ú master_fdÚ slave_nameÚslave_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)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 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 ÚopenÚO_RDWRr )ÚxÚyZpty_nameÚfdr 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)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< 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 ÚCHILDÚsetsidr r r Údup2ÚSTDIN_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 ÚdataÚnr 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)z�Parent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)N)r" r Úremover r&