
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \ƒó  ã               @   s4  d dl Z e jdkZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dlm
Z G dd„ deƒZG dd„ deƒZG dd	„ d	eƒZer²d dlZd dlZd dlZG d
d„ dƒZnhd dlZd dlZd dlZyd dlZW n ek
rò   d dlZY nX eeddƒZeedƒ�rejZnejZddddddddddddd	dgZe�r”d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ej(dddddd d!d"dg	ƒ G d#d$„ d$e)ƒZ*g Z+d%d&„ Z,d;Z-d<Z.d=Z/d*d+„ Z0d,d-„ Z1dd.œd/d„Z2d0d„ Z3dd.œd1d„Z4G d2d„ de5ƒZ6ddd3d4œd5d„Z7d6d7„ Z8d8d„ Z9d9d„ Z:e5ƒ Z;G d:d„ de5ƒZ<dS )>é    NZwin32)Ú	monotonicc               @   s   e Zd ZdS )ÚSubprocessErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú"/usr/lib64/python3.6/subprocess.pyr   9   s    r   c               @   s8   e Zd Zd	dd„Zdd„ Zedd„ ƒZejdd„ ƒZdS )
ÚCalledProcessErrorNc             C   s   || _ || _|| _|| _d S )N)Ú
returncodeÚcmdÚoutputÚstderr)Úselfr
   r   r   r   r   r   r   Ú__init__C   s    zCalledProcessError.__init__c             C   sb   | j rN| j dk rNyd| jtj| j  ƒf S  tk
rJ   d| j| j  f S X nd| j| j f S d S )Nr   zCommand '%s' died with %r.z)Command '%s' died with unknown signal %d.z.Command '%s' returned non-zero exit status %d.)r
   r   ÚsignalZSignalsÚ
ValueError)r   r   r   r   Ú__str__I   s    zCalledProcessError.__str__c             C   s   | j S )N)r   )r   r   r   r   ÚstdoutU   s    zCalledProcessError.stdoutc             C   s
   || _ d S )N)r   )r   Úvaluer   r   r   r   Z   s    )NN)r   r   r   r   r   Úpropertyr   Úsetterr   r   r   r   r	   <   s   
r	   c               @   s8   e Zd Zd	dd„Zdd„ Zedd„ ƒZejdd„ ƒZdS )
ÚTimeoutExpiredNc             C   s   || _ || _|| _|| _d S )N)r   Útimeoutr   r   )r   r   r   r   r   r   r   r   r   h   s    zTimeoutExpired.__init__c             C   s   d| j | jf S )Nz'Command '%s' timed out after %s seconds)r   r   )r   r   r   r   r   n   s    zTimeoutExpired.__str__c             C   s   | j S )N)r   )r   r   r   r   r   r   s    zTimeoutExpired.stdoutc             C   s
   || _ d S )N)r   )r   r   r   r   r   r   v   s    )NN)r   r   r   r   r   r   r   r   r   r   r   r   r   a   s   
r   c               @   s    e Zd ZdZdZdZdZdZdS )ÚSTARTUPINFOr   N)r   r   r   ÚdwFlagsÚ	hStdInputÚ
hStdOutputÚ	hStdErrorÚwShowWindowr   r   r   r   r   �   s
   r   ZPIPE_BUFi   ÚPollSelectorÚPopenÚPIPEÚSTDOUTÚcallÚ
check_callÚgetstatusoutputÚ	getoutputÚcheck_outputÚrunÚDEVNULLÚCompletedProcess)ÚCREATE_NEW_CONSOLEÚCREATE_NEW_PROCESS_GROUPÚSTD_INPUT_HANDLEÚSTD_OUTPUT_HANDLEÚSTD_ERROR_HANDLEÚSW_HIDEÚSTARTF_USESTDHANDLESÚSTARTF_USESHOWWINDOWr+   r,   r-   r.   r/   r0   r1   r2   c               @   s6   e Zd ZdZejfdd„Zdd„ Zdd„ ZeZ	eZ
dS )	ÚHandleFc             C   s   | j sd| _ || ƒ d S )NT)Úclosed)r   ÚCloseHandler   r   r   ÚClose³   s    zHandle.Closec             C   s    | j sd| _ t| ƒS tdƒ‚d S )NTzalready closed)r4   Úintr   )r   r   r   r   ÚDetach¸   s    zHandle.Detachc             C   s   d| j jt| ƒf S )Nz%s(%d))Ú	__class__r   r7   )r   r   r   r   Ú__repr__¾   s    zHandle.__repr__N)r   r   r   r4   Ú_winapir5   r6   r8   r:   Ú__del__r   r   r   r   r   r3   °   s   r3   c              C   sT   xNt d d … D ]>} | jtjd�}|d k	ryt j| ƒ W q tk
rJ   Y qX qW d S )N)Ú
_deadstate)Ú_activeÚ_internal_pollÚsysÚmaxsizeÚremover   )ZinstÚresr   r   r   Ú_cleanupË   s    rD   é   é   é   c              C   s*   g } t jj}|dkr&| jdd|  ƒ | S )Nr   ú-ÚO)r@   ÚflagsÚoptimizeÚappend)Úargsr   r   r   r   Ú"_optim_args_from_interpreter_flagsß   s
    rN   c              C   s   dddddddœ} t ƒ }x:| jƒ D ].\}}ttj|ƒ}|dkr"|jd	||  ƒ q"W tjjrh|jd
ƒ n$tjjrz|jdƒ tjjrŒ|jdƒ xtj	D ]}|jd| ƒ q”W ttdi ƒ}xDdD ]<}||kr¼|| }|dkrÞ|}nd||f }|j
d|fƒ q¼W |S )NÚdÚBÚSÚvÚbÚq)ÚdebugÚdont_write_bytecodeÚno_siteÚverboseÚbytes_warningÚquietr   rH   z-Iz-Ez-sz-WÚ	_xoptionsÚfaulthandlerÚtracemallocÚshowalloccountÚshowrefcountÚutf8Tz%s=%sz-X)r\   r]   r^   r_   r`   )rN   ÚitemsÚgetattrr@   rJ   rL   ÚisolatedÚignore_environmentÚno_user_siteÚwarnoptionsÚextend)Zflag_opt_maprM   ÚflagÚoptrR   Zxoptionsr   Úargr   r   r   Ú_args_from_interpreter_flagsé   s:    

rk   )r   c             O   sF   t ||Ž�2}y|j| d�S    |jƒ  |jƒ  ‚ Y nX W d Q R X d S )N)r   )r    ÚwaitÚkill)r   Ú	popenargsÚkwargsÚpr   r   r   r#     s    c              O   s6   t | |Ž}|r2|jdƒ}|d kr(| d }t||ƒ‚dS )NrM   r   )r#   Úgetr	   )rn   ro   Úretcoder   r   r   r   r$   (  s    



c             O   sT   d|krt dƒ‚d|kr<|d d kr<|jddƒr4dnd|d< t|t| dd	œ|—ŽjS )
Nr   z3stdout argument not allowed, it will be overridden.ÚinputÚuniversal_newlinesFÚ ó    T)r   r   Úcheck)r   rq   r(   r!   r   )r   rn   ro   r   r   r   r'   ;  s     c               @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r*   Nc             C   s   || _ || _|| _|| _d S )N)rM   r
   r   r   )r   rM   r
   r   r   r   r   r   r   r  s    zCompletedProcess.__init__c             C   sh   dj | jƒdj | jƒg}| jd k	r4|jdj | jƒƒ | jd k	rP|jdj | jƒƒ dj t| ƒjdj|ƒƒS )Nz	args={!r}zreturncode={!r}zstdout={!r}zstderr={!r}z{}({})z, )	ÚformatrM   r
   r   rL   r   Útyper   Újoin)r   rM   r   r   r   r:   x  s    


zCompletedProcess.__repr__c             C   s    | j rt| j | j| j| jƒ‚d S )N)r
   r	   rM   r   r   )r   r   r   r   Úcheck_returncode�  s    z!CompletedProcess.check_returncode)NN)r   r   r   r   r:   r{   r   r   r   r   r*   g  s   
	F)rs   r   rw   c       	      O   sÖ   | d k	r d|krt dƒ‚t|d< t||Ž�–}y|j| |d�\}}W nV tk
r|   |jƒ  |jƒ \}}t|j|||d�‚Y n   |jƒ  |jƒ  ‚ Y nX |jƒ }|r¼|r¼t	||j||d�‚W d Q R X t
|j|||ƒS )NÚstdinz/stdin and input arguments may not both be used.)r   )r   r   )r   r!   r    Úcommunicater   rm   rM   rl   Úpollr	   r*   )	rs   r   rw   rn   ro   Zprocessr   r   rr   r   r   r   r(   ˆ  s*    
c             C   sè   g }d}xÔ| D ]Ì}g }|r$|j dƒ d|kp8d|kp8| }|rH|j dƒ xj|D ]b}|dkrf|j |ƒ qN|dkr”|j dt|ƒ d ƒ g }|j dƒ qN|r¦|j|ƒ g }|j |ƒ qNW |rÂ|j|ƒ |r|j|ƒ |j dƒ qW dj|ƒS )	NFú ú	ú"ú\rF   z\"ru   )rL   Úlenrg   rz   )ÚseqÚresultZ	needquoterj   Zbs_bufÚcr   r   r   Úlist2cmdlineº  s4    






r‡   c             C   sl   yt | ddtd�}d}W n. tk
rF } z|j}|j}W Y d d }~X nX |dd … dkrd|d d… }||fS )NT)Úshellrt   r   r   rE   Ú
éÿÿÿÿrŠ   )r'   r"   r	   r   r
   )r   ÚdataZexitcodeZexr   r   r   r%     s    c             C   s   t | ƒd S )NrE   )r%   )r   r   r   r   r&   "  s    
c               @   sˆ  e Zd ZdZd>dddddeddddddddf fdddœdd„Zd	d
„ Zdd„ Zdd„ Ze	j
ejfdd„Zdd„ Zdd„ Zd?dd„Zdd„ Zdd„ Zdd„ Ze�r dd„ Zdd „ Zd!d"„ Zdejejejfd#d$„Zd@d%d&„Zd'd(„ Zd)d*„ Zd+d,„ Z d-d.„ Z!e!Z"n„d/d„ Zd0d"„ Ze#j$e#j%e#j&e#j'e#j(e#j)fd1d2„Z*de#j+e#j,e-j.fd3d$„Zd4d5„ Z/dAd6d&„Zd7d*„ Zd8d9„ Z0d:d,„ Z d;d.„ Z!d<d=„ Z"dS )Br    FrE   Nr   T)ÚencodingÚerrorsc            C   sr  t ƒ  tjƒ | _d | _d| _|d kr(d}t|tƒs:tdƒ‚t	r�|d k	rNt
dƒ‚|d k	pd|d k	pd|d k	}|tkr~|rxd}qŽd}qÖ|rÖ|rÖt
dƒ‚nF|tkrœd}|r¶| r¶tjdtƒ d}|d k	rÆt
dƒ‚|d	krÖt
d
ƒ‚|| _d | _d | _d | _d | _d | _|| _|| _|| _| j|||ƒ\}}}}}}t	�rz|dk�rFtj|jƒ d	ƒ}|dk�r`tj|jƒ d	ƒ}|dk�rztj|jƒ d	ƒ}|�pˆ|�pˆ|}d| _yÖ|dk�rÎtj|d|ƒ| _|�rÎtj| jd|dk||d�| _|dk�rtj|d|ƒ| _|�rtj| j||d�| _|dk�r6tj|d|ƒ| _|�r6tj| j||d�| _| j ||||||
||||	||||||||ƒ W �n   xDt!d | j| j| jfƒD ]*}y|j"ƒ  W n t#k
�r¬   Y nX �q†W | j�sfg }|t$k�rÔ|j%|ƒ |t$k�rè|j%|ƒ |t$k�rü|j%|ƒ t&| dƒ�r|j%| j'ƒ xP|D ]H}y*t	�r<t|t(ƒ�r<|j)ƒ  n
t*j"|ƒ W n t#k
�r^   Y nX �qW ‚ Y nX d S )NFrE   zbufsize must be an integerz0preexec_fn is not supported on Windows platformsTzSclose_fds is not supported on Windows platforms if you redirect stdin/stdout/stderrzpass_fds overriding close_fds.z2startupinfo is only supported on Windows platformsr   z4creationflags is only supported on Windows platformsÚwb)Úwrite_throughÚline_bufferingrŒ   r�   Úrb)rŒ   r�   Ú_devnullrŠ   rŠ   rŠ   rŠ   rŠ   rŠ   rŠ   )+rD   Ú	threadingZLockÚ_waitpid_lockÚ_inputÚ_communication_startedÚ
isinstancer7   Ú	TypeErrorÚ
_mswindowsr   Ú_PLATFORM_DEFAULT_CLOSE_FDSÚwarningsÚwarnÚRuntimeWarningrM   r|   r   r   Úpidr
   rt   rŒ   r�   Ú_get_handlesÚmsvcrtZopen_osfhandler8   Ú_closed_child_pipe_fdsÚioÚopenÚTextIOWrapperÚ_execute_childÚfilterÚcloseÚOSErrorr!   rL   Úhasattrr’   r3   r6   Úos)r   rM   ÚbufsizeÚ
executabler|   r   r   Ú
preexec_fnÚ	close_fdsrˆ   ÚcwdÚenvrt   ÚstartupinfoÚcreationflagsÚrestore_signalsÚstart_new_sessionÚpass_fdsrŒ   r�   Zany_stdio_setÚp2creadÚp2cwriteÚc2preadÚc2pwriteÚerrreadÚerrwriteZ	text_modeÚfZto_closeÚfdr   r   r   r   `  sÀ    

















zPopen.__init__c             C   s    |j ||ƒ}|jddƒjddƒS )Nz
r‰   ú)ÚdecodeÚreplace)r   r‹   rŒ   r�   r   r   r   Ú_translate_newlines÷  s    zPopen._translate_newlinesc             C   s   | S )Nr   )r   r   r   r   Ú	__enter__û  s    zPopen.__enter__c          
   C   sD   | j r| j jƒ  | jr | jjƒ  z| jr2| jjƒ  W d | jƒ  X d S )N)r   r§   r   r|   rl   )r   ry   r   Ú	tracebackr   r   r   Ú__exit__þ  s    

zPopen.__exit__c             C   sT   | j s
d S | jd kr(|d| j t| d� | j|d� | jd krPtd k	rPtj| ƒ d S )Nzsubprocess %s is still running)Úsource)r=   )Ú_child_createdr
   rž   ÚResourceWarningr?   r>   rL   )r   Z_maxsizeZ_warnr   r   r   r<   
  s    


zPopen.__del__c             C   s"   t | dƒstjtjtjƒ| _| jS )Nr’   )r©   rª   r£   ÚdevnullÚO_RDWRr’   )r   r   r   r   Ú_get_devnull  s    
zPopen._get_devnullc             C   s²   |rZy| j j|ƒ W nD tk
r(   Y n2 tk
rX } z|jtjkrFn‚ W Y d d }~X nX y| j jƒ  W nD tk
r|   Y n2 tk
r¬ } z|jtjkršn‚ W Y d d }~X nX d S )N)r|   ÚwriteÚBrokenPipeErrorr¨   ÚerrnoZEINVALr§   )r   rs   Úexcr   r   r   Ú_stdin_write  s"    zPopen._stdin_writec             C   sè   | j r|rtdƒ‚|d kr–| j  r–| j| j| jgjd ƒdkr–d }d }| jrV| j|ƒ n6| jrr| jjƒ }| jjƒ  n| jrŒ| jjƒ }| jjƒ  | j	ƒ  nJ|d k	rªt
ƒ | }nd }z| j|||ƒ\}}W d d| _ X | j	| j|ƒd�}||fS )Nz.Cannot send input after starting communicationrF   T)r   )r–   r   r|   r   r   ÚcountrÏ   Úreadr§   rl   Ú_timeÚ_communicateÚ_remaining_time)r   rs   r   r   r   ÚendtimeÚstsr   r   r   r}   7  s.    




zPopen.communicatec             C   s   | j ƒ S )N)r?   )r   r   r   r   r~   h  s    z
Popen.pollc             C   s   |d krd S |t ƒ  S d S )N)rÒ   )r   rÕ   r   r   r   rÔ   n  s    zPopen._remaining_timec             C   s&   |d krd S t ƒ |kr"t| j|ƒ‚d S )N)rÒ   r   rM   )r   rÕ   Úorig_timeoutr   r   r   Ú_check_timeoutv  s    
zPopen._check_timeoutc             C   s€  |d kr|d kr|d krd	S d\}}d\}}d\}}	|d krtt jt jƒ}|d krrt jd dƒ\}}
t|ƒ}t j|
ƒ nj|tkr t jd dƒ\}}t|ƒt|ƒ }}n>|tkr¸tj	| j
ƒ ƒ}n&t|tƒ� rÐtj	|ƒ}ntj	|jƒ ƒ}| j|ƒ}|d k�r,t jt jƒ}|d k�ršt jd dƒ\}
}t|ƒ}t j|
ƒ nn|tk�rZt jd dƒ\}}t|ƒt|ƒ }}n@|tk�rttj	| j
ƒ ƒ}n&t|tƒ�rŒtj	|ƒ}ntj	|jƒ ƒ}| j|ƒ}|d k�rèt jt jƒ}	|	d k�rft jd dƒ\}
}	t|	ƒ}	t j|
ƒ n~|tk�rt jd dƒ\}}	t|ƒt|	ƒ }}	nP|tk�r&|}	n@|tk�r@tj	| j
ƒ ƒ}	n&t|tƒ�rXtj	|ƒ}	ntj	|jƒ ƒ}	| j|	ƒ}	||||||	fS )NrE   r   rŠ   rŠ   rŠ   rŠ   rŠ   rŠ   )rŠ   rŠ   rŠ   rŠ   rŠ   rŠ   rŠ   rŠ   )rŠ   rŠ   rŠ   rŠ   )rŠ   rŠ   rŠ   rŠ   )rŠ   rŠ   )r;   ZGetStdHandler-   Z
CreatePiper3   r5   r!   r)   r    Zget_osfhandlerÊ   r—   r7   ÚfilenoÚ_make_inheritabler.   r/   r"   )r   r|   r   r   r¶   r·   r¸   r¹   rº   r»   Ú_r   r   r   rŸ   ‚  sn    











zPopen._get_handlesc             C   s&   t jt jƒ |t jƒ ddt jƒ}t|ƒS )Nr   rE   )r;   ZDuplicateHandleZGetCurrentProcessZDUPLICATE_SAME_ACCESSr3   )r   ZhandleÚhr   r   r   rÚ   Ê  s
    
zPopen._make_inheritablec             C   s<  t |tƒst|ƒ}|d kr tƒ }d|||fkrP| jtjO  _||_||_||_	|
r†| jtj
O  _tj|_tjjddƒ}dj||ƒ}z>tj||d d t| ƒ|	||d k	r²tj|ƒnd |ƒ	\}}}}W d |dkrÖ|jƒ  |d	kræ|jƒ  |d
k� rø|jƒ  t| dƒ�rtj| jƒ d| _X d| _t|ƒ| _|| _tj|ƒ d S )NrE   ZCOMSPECzcmd.exez
{} /c "{}"r’   TrŠ   rŠ   rŠ   rŠ   )r—   Ústrr‡   r   r   r;   r1   r   r   r   r2   r0   r   rª   Úenvironrq   rx   ZCreateProcessr7   Úfspathr6   r©   r§   r’   r¡   rÆ   r3   Ú_handlerž   r5   )r   rM   r¬   r­   r®   rµ   r¯   r°   r±   r²   rˆ   r¶   r·   r¸   r¹   rº   r»   Zunused_restore_signalsZunused_start_new_sessionZcomspecZhpZhtrž   Útidr   r   r   r¥   Ó  sF    


zPopen._execute_childc             C   s,   | j d kr&|| jdƒ|kr&|| jƒ| _ | j S )Nr   )r
   rà   )r   r=   Z_WaitForSingleObjectZ_WAIT_OBJECT_0Z_GetExitCodeProcessr   r   r   r?     s    
zPopen._internal_pollc             C   s€   |d k	r"t jdtdd� | j|ƒ}|d kr2tj}nt|d ƒ}| jd krztj| j	|ƒ}|tj
krlt| j|ƒ‚tj| j	ƒ| _| jS )Nz0'endtime' argument is deprecated; use 'timeout'.rF   )Ú
stackleveliè  )r›   rœ   ÚDeprecationWarningrÔ   r;   ZINFINITEr7   r
   ÚWaitForSingleObjectrà   ZWAIT_TIMEOUTr   rM   ÚGetExitCodeProcess)r   r   rÕ   Ztimeout_millisr…   r   r   r   rl   $  s     


z
Popen.waitc             C   s   |j |jƒ ƒ |jƒ  d S )N)rL   rÑ   r§   )r   ZfhÚbufferr   r   r   Ú_readerthread:  s    zPopen._readerthreadc             C   s`  | j rDt| dƒ rDg | _tj| j| j | jfd�| _d| j_| jjƒ  | j	rˆt| dƒ rˆg | _
tj| j| j	| j
fd�| _d| j_| jjƒ  | jr˜| j|ƒ | j d k	rÊ| jj| j|ƒƒ | jjƒ rÊt| j|ƒ‚| j	d k	rü| jj| j|ƒƒ | jjƒ rüt| j|ƒ‚d }d }| j �r| j}| j jƒ  | j	�r4| j
}| j	jƒ  |d k	�rF|d }|d k	�rX|d }||fS )NÚ_stdout_buff)ÚtargetrM   TÚ_stderr_buffr   )r   r©   rè   r“   ZThreadrç   Zstdout_threadZdaemonÚstartr   rê   Zstderr_threadr|   rÏ   rz   rÔ   Zis_aliver   rM   r§   )r   rs   rÕ   r×   r   r   r   r   r   rÓ   ?  sF    










zPopen._communicatec             C   sl   | j d k	rd S |tjkr"| jƒ  nF|tjkr>tj| jtjƒ n*|tjkrZtj| jtjƒ nt	dj
|ƒƒ‚d S )NzUnsupported signal: {})r
   r   ÚSIGTERMÚ	terminateZCTRL_C_EVENTrª   rm   rž   ZCTRL_BREAK_EVENTr   rx   )r   Úsigr   r   r   Úsend_signals  s    




zPopen.send_signalc             C   sX   | j d k	rd S ytj| jdƒ W n2 tk
rR   tj| jƒ}|tjkrH‚ || _ Y nX d S )NrE   )r
   r;   ZTerminateProcessrà   ÚPermissionErrorrå   ZSTILL_ACTIVE)r   Zrcr   r   r   rí   �  s    

zPopen.terminatec       
      C   s.  d\}}d\}}d
\}}	|d kr"n@|t kr8tjƒ \}}n*|tkrJ| jƒ }nt|tƒrZ|}n|jƒ }|d krln@|t kr‚tjƒ \}}n*|tkr”| jƒ }nt|tƒr¤|}n|jƒ }|d kr¶nh|t krÌtjƒ \}}	nR|tk� rð|dkrä|}	n
t	j
jƒ }	n.|tk�r| jƒ }	nt|tƒ�r|}	n|jƒ }	||||||	fS )NrE   rŠ   rŠ   )rŠ   rŠ   rŠ   rŠ   )rŠ   rŠ   rŠ   rŠ   )rŠ   rŠ   rŠ   )r!   rª   Úpiper)   rÊ   r—   r7   rÙ   r"   r@   Ú
__stdout__)
r   r|   r   r   r¶   r·   r¸   r¹   rº   r»   r   r   r   rŸ   –  sJ    






c       )   "      s°  t |ttfƒr|g}nt|ƒ}|
r:ddg| }ˆ r:ˆ |d< ˆ d krJ|d ‰ ˆ }tjƒ \}}g }x |dk r~|j|ƒ tj|ƒ}q`W x|D ]}tj|ƒ q†W �zÖzì|d k	rôg }xL|j	ƒ D ]:\}}tj
|ƒ}d|krÖtdƒ‚|j|d tj
|ƒ ƒ q´W nd }tj
ˆ ƒ‰ tjjˆ ƒ�rˆ f}nt‡ fdd„tj|ƒD ƒƒ}t|ƒ}|j|ƒ tj|||tttt|ƒƒƒ|||||||||||||ƒ| _d	| _W d tj|ƒ X t| d
d ƒ}|dk�rÊ|dk�rÊ||k�rÊtj|ƒ |dk�rò|dk�rò||k�ròtj|ƒ |dk�r|dk�r||k�rtj|ƒ |d k	�r.tj|ƒ d	| _tƒ }x2tj|dƒ}||7 }| �sft|ƒdk�r<P �q<W W d tj|ƒ X |�r¬y6tj| jdƒ\} }!| | jk�r°| j|!ƒ nt j!| _"W n t#k
�rÐ   Y nX y|j$ddƒ\}"}#}$|$j%ƒ }$W n, tk
�r   d}"d}#dj&t|ƒƒ}$Y nX tt'|"j%dƒt(ƒ}%t)|%t*ƒ�r¤|#�r¤t|#dƒ}&|$dk}'|'�rdd}$|}(n|}(|&dk�r˜tj+|&ƒ}$|&t,j-k�r˜|$dt.|(ƒ 7 }$|%|&|$|(ƒ‚|%|$ƒ‚d S )Nz/bin/shz-cr   rG   ó   =z!illegal environment variable namec             3   s"   | ]}t jjt j|ƒˆ ƒV  qd S )N)rª   Úpathrz   Úfsencode)Ú.0Údir)r¬   r   r   ú	<genexpr>  s   z'Popen._execute_child.<locals>.<genexpr>Tr’   rE   iPÃ  ó   :rF   s   SubprocessErroró   0z#Bad exception data from child: {!r}Úasciié   Znoexecru   z: rŠ   rŠ   rŠ   rŠ   rŠ   rŠ   )/r—   rÝ   ÚbytesÚlistrª   rñ   rL   Údupr§   ra   rõ   r   rô   ÚdirnameÚtupleÚget_exec_pathÚsetÚaddÚ_posixsubprocessZ	fork_execÚsortedÚmapr7   rž   rÆ   rb   r¡   Ú	bytearrayrÑ   rƒ   ÚwaitpidÚ_handle_exitstatusr@   rA   r
   ÚChildProcessErrorÚsplitr¿   rx   Úbuiltinsr   Ú
issubclassr¨   ÚstrerrorrÍ   ÚENOENTÚrepr))r   rM   r¬   r­   r®   rµ   r¯   r°   r±   r²   rˆ   r¶   r·   r¸   r¹   rº   r»   r³   r´   Zorig_executableZerrpipe_readZerrpipe_writeZlow_fds_to_closeZlow_fdZenv_listÚkrR   Zexecutable_listZfds_to_keepZ
devnull_fdZerrpipe_dataÚpartrž   rÖ   Zexception_nameZ	hex_errnoZerr_msgZchild_exception_typeZ	errno_numZchild_exec_never_calledZerr_filenamer   )r¬   r   r¥   Ì  s¼    	
















c             C   sL   ||ƒr||ƒ | _ n2||ƒr*||ƒ| _ n||ƒr@||ƒ | _ ntdƒ‚d S )NzUnknown child exit status!)r
   r   )r   rÖ   Z_WIFSIGNALEDZ	_WTERMSIGZ
_WIFEXITEDZ_WEXITSTATUSZ_WIFSTOPPEDZ	_WSTOPSIGr   r   r   r
  X  s    zPopen._handle_exitstatusc             C   s®   | j d kr¨| jjdƒsd S z€y8| j d k	r.| j S || j|ƒ\}}|| jkrR| j|ƒ W nB tk
r– } z&|d k	rv|| _ n|j|kr†d| _ W Y d d }~X nX W d | jjƒ  X | j S )NFr   )r
   r”   Úacquirerž   r
  r¨   rÍ   Úrelease)r   r=   Z_waitpidZ_WNOHANGZ_ECHILDrž   rÖ   Úer   r   r   r?   j  s     	



c             C   s>   yt j| j|ƒ\}}W n tk
r4   | j}d}Y nX ||fS )Nr   )rª   r	  rž   r  )r   Z
wait_flagsrž   rÖ   r   r   r   Ú	_try_wait�  s    
zPopen._try_waitc             C   sV  | j d k	r| j S |d k	r(tjdtdd� |d k	s8|d k	r^|d krLtƒ | }n|d kr^| j|ƒ}|d k	rúd}xä| jjdƒr¼z6| j d k	r†P | jt	j
ƒ\}}|| jkr¬| j|ƒ P W d | jjƒ  X | j|ƒ}|dkrÚt| j|ƒ‚t|d |dƒ}tj|ƒ qlW nVxT| j d k�rN| j�8 | j d k	�rP | jdƒ\}}|| jk�rB| j|ƒ W d Q R X qüW | j S )Nz0'endtime' argument is deprecated; use 'timeout'.rF   )râ   gü©ñÒMb@?Fr   gš™™™™™©?)r
   r›   rœ   rã   rÒ   rÔ   r”   r  r  rª   ÚWNOHANGrž   r
  r  r   rM   ÚminÚtimeZsleep)r   r   rÕ   Zdelayrž   rÖ   Z	remainingr   r   r   rl   š  sJ    





c          #   C   s  | j rZ| j rZy| j jƒ  W n tk
r0   Y nX |sZy| j jƒ  W n tk
rX   Y nX d }d }| js’i | _| jr€g | j| j< | jr’g | j| j< | jr¤| j| j }| jr¶| j| j }| j|ƒ | j	rÐt
| j	ƒ}tƒ ��ž}| j rô|rô|j| j tjƒ | j�r|j| jtjƒ | j�r$|j| jtjƒ �xJ|jƒ �rp| j|ƒ}|d k	�r\|dk �r\t| j|ƒ‚|j|ƒ}	| j||ƒ xø|	D ]ð\}
}|
j| j k�r|| j| jt … }y|  jtj|
j|ƒ7  _W n, tk
�rê   |j|
jƒ |
jjƒ  Y n*X | jt| j	ƒk�rf|j|
jƒ |
jjƒ  nP|
j| j| jfk�rxtj|
jdƒ}|�sT|j|
jƒ |
jjƒ  | j|
j j|ƒ �qxW �q(W W d Q R X | j | j|ƒd� |d k	�r¢dj!|ƒ}|d k	�r¶dj!|ƒ}| j"�sÎ| j#�sÎ| j$�r|d k	�rî| j%|| jj"| jj#ƒ}|d k	�r| j%|| jj"| jj#ƒ}||fS )Nr   i €  )r   rv   )&r|   r–   ÚflushrÌ   r§   Z_fileobj2outputr   r   Ú_save_inputr•   Ú
memoryviewÚ_PopenSelectorÚregisterÚ	selectorsZEVENT_WRITEZ
EVENT_READZget_maprÔ   r   rM   ÚselectrØ   ZfileobjÚ_input_offsetÚ	_PIPE_BUFrª   rË   r½   Z
unregisterrƒ   rÑ   rL   rl   rz   rŒ   r�   rt   rÁ   )r   rs   rÕ   r×   r   r   Z
input_viewZselectorr   ZreadyÚkeyZeventsÚchunkr‹   r   r   r   rÓ   Î  sŽ    






(







c             C   sR   | j rN| jd krNd| _|| _|d k	rN| js6| js6| jrN| jj| j j| j jƒ| _d S )Nr   )r|   r•   r"  rŒ   r�   rt   Úencode)r   rs   r   r   r   r  /  s    zPopen._save_inputc             C   s   | j d krtj| j|ƒ d S )N)r
   rª   rm   rž   )r   rî   r   r   r   rï   <  s    
c             C   s   | j tjƒ d S )N)rï   r   rì   )r   r   r   r   rí   B  s    c             C   s   | j tjƒ d S )N)rï   r   ÚSIGKILL)r   r   r   r   rm   G  s    z
Popen.killrŠ   )NN)NN)NN)1r   r   r   rÆ   rš   r   rÁ   rÂ   rÄ   r@   rA   r›   rœ   r<   rÊ   rÏ   r}   r~   rÔ   rØ   r™   rŸ   rÚ   r¥   r;   rä   ZWAIT_OBJECT_0rå   r?   rl   rç   rÓ   rï   rí   rm   rª   ÚWIFSIGNALEDÚWTERMSIGÚ	WIFEXITEDÚWEXITSTATUSÚ
WIFSTOPPEDÚWSTOPSIGr
  r	  r  rÍ   ZECHILDr  r  r   r   r   r   r    2  sb   , 
1H	@
46 "
4arŠ   éþÿÿÿéýÿÿÿ)=r@   Úplatformr™   r¢   rª   r  r   r  r›   rÍ   r   rÒ   Ú	Exceptionr   r	   r   r“   r    r;   r   r  r!  r   ÚImportErrorZdummy_threadingrb   r#  r©   r   r  ZSelectSelectorÚ__all__r+   r,   r-   r.   r/   r0   r1   r2   rg   r7   r3   r>   rD   r!   r"   r)   rN   rk   r#   r$   r'   Úobjectr*   r(   r‡   r%   r&   rš   r    r   r   r   r   Ú<module>,   sp   
%

(
.,!2I