ó
xFWgc           @   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
 „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z e e d „ Z e e d „ Z d S(   s   Pseudo terminal utilities.iÿÿÿÿ(   t   selectNt   openptyt   forkt   spawni    i   i   c          C   sM   y t  j ƒ  SWn t t f k
 r' n Xt ƒ  \ }  } t | ƒ } |  | f S(   sd   openpty() -> (master_fd, slave_fd)
    Open a pty master/slave pair, using os.openpty() if possible.(   t   osR   t   AttributeErrort   OSErrort   _open_terminalt
   slave_open(   t	   master_fdt
   slave_namet   slave_fd(    (    s   /usr/lib/python2.7/pty.pyR      s    c          C   s]   y t  j ƒ  \ }  } Wn t t f k
 r/ n' Xt  j | ƒ } t  j | ƒ |  | f St ƒ  S(   s›   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   t   ttynamet   closeR   (   R	   R   R
   (    (    s   /usr/lib/python2.7/pty.pyt   master_open!   s    
c          C   sô   y d d l  }  Wn t k
 r# nO Xy" |  j t j d d ƒ \ } } Wn t k
 rg } t j | ‚ n X| | f Sxo d D]g } x^ d D]V } d | | } y t j | t j ƒ } Wn t j k
 rÌ q† n X| d | | f SWqy Wt j d	 ‚ d S(
   sl   Open pty master and return (master_fd, tty_name).
    SGI and generic BSD version, for when openpty() fails.iÿÿÿÿNi¶  i    t   pqrstuvwxyzPQRSTt   0123456789abcdefs   /dev/ptys   /dev/ttys   out of pty devices(   t   sgit   ImportErrort   _getptyR   t   O_RDWRt   IOErrort   errort   open(   R   t   tty_nameR	   t   msgt   xt   yt   pty_namet   fd(    (    s   /usr/lib/python2.7/pty.pyR   1   s$    "
c         C   s€   t  j |  t  j ƒ } y d d l m } m } Wn t k
 rC | SXy$ | | | d ƒ | | | d ƒ Wn t k
 r{ n X| S(   s©   slave_open(tty_name) -> slave_fd
    Open the pty slave and acquire the controlling terminal, returning
    opened filedescriptor.
    Deprecated, use openpty() instead.iÿÿÿÿ(   t   ioctlt   I_PUSHt   ptemt   ldterm(   R   R   R   t   fcntlR   R   R   R   (   R   t   resultR   R   (    (    s   /usr/lib/python2.7/pty.pyR   H   s    c          C   s:  y t  j ƒ  \ }  } Wn t t f k
 r/ n< X|  t k ra y t  j ƒ  Wqa t k
 r] qa 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(   sd   fork() -> (pid, master_fd)
    Fork and make the child a session leader with a controlling terminal.(   R   t   forkptyR   R   t   CHILDt   setsidR   R   R   t   dup2t   STDIN_FILENOt   STDOUT_FILENOt   STDERR_FILENOR   R   R   (   t   pidR   R	   R   t   tmp_fd(    (    s   /usr/lib/python2.7/pty.pyR   Z   s0    

c         C   s3   x, | d k r. t  j |  | ƒ } | | } q Wd S(   s#   Write all the data to a descriptor.t    N(   R   t   write(   R   t   datat   n(    (    s   /usr/lib/python2.7/pty.pyt   _writen‚   s    c         C   s   t  j |  d ƒ S(   s   Default read function.i   (   R   t   read(   R   (    (    s   /usr/lib/python2.7/pty.pyt   _readˆ   s    c         C   s·   |  t  g } x¤ t r² t | g  g  ƒ \ } } } |  | k rq | |  ƒ } | s^ | j |  ƒ qq t j t | ƒ n  t  | k r | t  ƒ } | sŸ | j t  ƒ q¯ t |  | ƒ q q Wd S(   s   Parent copy loop.
    Copies
            pty master -> standard output   (master_read)
            standard input -> pty master    (stdin_read)N(   R(   t   TrueR    t   removeR   R.   R)   R1   (   R	   t   master_readt
   stdin_readt   fdst   rfdst   wfdst   xfdsR/   (    (    s   /usr/lib/python2.7/pty.pyt   _copyŒ   s    	c         C   s÷   t  |  ƒ t  d ƒ k r$ |  f }  n  t ƒ  \ } } | t k rV t j |  d |  Œ n  y& t j t ƒ } t j t ƒ d } Wn t j	 k
 r˜ d } n Xy t
 | | | ƒ Wn6 t t f k
 rå | ræ t j t t j | ƒ qæ n Xt j | ƒ d S(   s   Create a spawned process.R-   i    i   N(   t   typeR   R%   R   t   execlpt   ttyt	   tcgetattrR(   t   setrawR   R<   R   R   t	   tcsetattrt	   TCSAFLUSHR   (   t   argvR6   R7   R+   R	   t   modet   restore(    (    s   /usr/lib/python2.7/pty.pyR   ¡   s"    

(   t   __doc__R    R   R?   t   __all__R(   R)   R*   R%   R   R   R   R   R   R1   R3   R<   R   (    (    (    s   /usr/lib/python2.7/pty.pyt   <module>   s"   					(		