³ò
˜%ÃKc           @   s¥  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z e i Z e i o6 d  d k l Z l	 Z	 d  d k
 l Z d  d k Z n d  d k Z d  d k Z d e i f d „  ƒ  YZ d Z d d d	 d
 d „ Z d „  Z e d j oº e i d j o d d d Z Z Z n d d d Z Z Z e e d e d e ƒZ e e ƒ Gx) e D]! Z e e e e ƒ e e ƒ GqLWe e d e ƒ e e d d
 ƒGHe i ƒ  n d S(   iÿÿÿÿN(   t   ReadFilet	   WriteFile(   t   PeekNamedPipet   Popenc           B   ss   e  Z d
 d  „ Z d
 d „ Z d d
 d „ Z d „  Z d „  Z e i	 o d „  Z
 d „  Z n d „  Z
 d	 „  Z RS(   c         C   s   |  i  d | ƒ S(   Nt   stdout(   t   _recv(   t   selft   maxsize(    (    s   ./monkeysubprocess.pyt   recv   s    c         C   s   |  i  d | ƒ S(   Nt   stderr(   R   (   R   R   (    (    s   ./monkeysubprocess.pyt   recv_err   s    t    c         C   s(   |  i  | ƒ |  i | ƒ |  i | ƒ f S(   N(   t   sendR   R
   (   R   t   inputR   (    (    s   ./monkeysubprocess.pyt	   send_recv   s    c         C   sA   | d  j o
 d } n | d j  o
 d } n t |  | ƒ | f S(   Ni   i   (   t   Nonet   getattr(   R   t   whichR   (    (    s   ./monkeysubprocess.pyt   get_conn_maxsize   s
    

c         C   s'   t  |  | ƒ i ƒ  t |  | d  ƒ d  S(   N(   R   t   closet   setattrR   (   R   R   (    (    s   ./monkeysubprocess.pyt   _close&   s    c         C   s¸   |  i  p d  Sn y1 t i |  i  i ƒ  ƒ } t | | ƒ \ } } Wnn t j
 o |  i d ƒ SnP t i	 i
 t f j
 o7 } | d d t i f j o |  i d ƒ Sn ‚  n X| S(   Nt   stdini    im   (   R   R   t   msvcrtt   get_osfhandlet   filenoR   t
   ValueErrorR   t
   subprocesst
   pywintypest   errort	   Exceptiont   errnot	   ESHUTDOWN(   R   R   t   xt   errCodet   writtent   why(    (    s   ./monkeysubprocess.pyR   +   s    
c   
      C   s0  |  i  | | ƒ \ } } | d  j o d  Sn yq t i | i ƒ  ƒ } t | d ƒ \ } } } | | j  o
 | } n | d j o t | | d  ƒ \ } } n Wnn t j
 o |  i | ƒ SnP t	 i
 i t f j
 o7 }	 |	 d d t i f j o |  i | ƒ Sn ‚  n X|  i o |  i | ƒ } n | S(   Ni    im   (   R   R   R   R   R   R   R    R   R   R   R   R   R   R   R    t   universal_newlinest   _translate_newlines(
   R   R   R   t   connR!   t   readt   nAvailt   nMessageR"   R$   (    (    s   ./monkeysubprocess.pyR   ;   s&    
 
c         C   s    |  i  p d  Sn t i g  |  i  g g  d ƒ d p d Sn y t i |  i  i ƒ  | ƒ } Wn= t j
 o1 } | d t i j o |  i	 d ƒ Sn ‚  n X| S(   Ni    i   R   (
   R   R   t   selectt   ost   writeR   t   OSErrorR   t   EPIPER   (   R   R   R#   R$   (    (    s   ./monkeysubprocess.pyR   S   s    
#c         C   s  |  i  | | ƒ \ } } | d  j o d  Sn t i | t i ƒ } | i p! t i | t i | t i Bƒ n zt t i | g g  g  d ƒ d p d Sn | i	 | ƒ } | p |  i
 | ƒ Sn |  i o |  i | ƒ } n | SWd  | i p t i | t i | ƒ n Xd  S(   Ni    R   (   R   R   t   fcntlt   F_GETFLt   closedt   F_SETFLR,   t
   O_NONBLOCKR+   R(   R   R%   R&   (   R   R   R   R'   t   flagst   r(    (    s   ./monkeysubprocess.pyR   c   s"    
! 

N(   t   __name__t
   __module__R   R   R
   R   R   R   R   t	   mswindowsR   R   (    (    (    s   ./monkeysubprocess.pyR      s   		
		s   Other end disconnected!gš™™™™™¹?i   i   i    c   	      C   sí   | d j  o
 d } n t  i  ƒ  | } g  } d } |  i } | o |  i } n x t  i  ƒ  | j  p | or | ƒ  } | d  j o | o t t ƒ ‚ qÛ PqS | o | i | ƒ qS t  i t | t  i  ƒ  | d ƒ ƒ qS Wd i	 | ƒ S(   Ni   R   i    (
   t   timeR   R
   R   R   t   messaget   appendt   sleept   maxt   join(	   t   pt   tt   et   trR	   R!   t   yR6   t   pr(    (    s   ./monkeysubprocess.pyt	   recv_some}   s&    
	 	)c         C   sT   xM t  | ƒ o? |  i | ƒ } | d  j o t t ƒ ‚ n t | | ƒ } q Wd  S(   N(   t   lenR   R   R   R;   t   buffer(   R@   t   datat   sent(    (    s   ./monkeysubprocess.pyt   send_all“   s     t   __main__t   win32t   cmds   dir /ws   echo HELLO WORLDs   
t   sht   lss   
R   R   t   exitRB   (   s   dir /ws   echo HELLO WORLD(   RP   s   echo HELLO WORLD(   R,   R   R   R:   t   syst   PIPER9   t	   win32fileR    R   t	   win32pipeR   R   R+   R0   R   R;   RF   RK   R7   t   platformt   shellt   commandst   tailt   aRN   t   wait(    (    (    s   ./monkeysubprocess.pys   <module>   s8   	
f	
 