o
    >cH                    @   sn  	 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Zd dlZd dl	Z	d dlm
Z d dlZzd dlZW n eyD   dZY nw g dZzd dlZd dlZdZW n eyl   dZd dlZd dlZd dlZY n0w d dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( e)g d G dd	 d	e*Z+G d
d de+Z,G dd de+Z-erG dd dZ.G dd de/Z0ne1eddZ2e3edrej4Z5nej6Z5erdZ7dd Z8ng Z7dd Z8dZ9dZ:dZ;dd Z<dd Z=ddd d!Z>d"d# Z?ddd$d%Z@G d&d' d'eAZBddddd(d)d*ZCd+d, ZDd-d. ZEd/d0 ZFd1d2 ZGeG ZHdZIG d3d4 d4ZJdS )5    N)	monotonic)PopenPIPESTDOUTcall
check_callgetstatusoutput	getoutputcheck_outputrunCalledProcessErrorDEVNULLSubprocessErrorTimeoutExpiredCompletedProcessTF)CREATE_NEW_CONSOLECREATE_NEW_PROCESS_GROUPSTD_INPUT_HANDLESTD_OUTPUT_HANDLESTD_ERROR_HANDLESW_HIDESTARTF_USESTDHANDLESSTARTF_USESHOWWINDOWABOVE_NORMAL_PRIORITY_CLASSBELOW_NORMAL_PRIORITY_CLASSHIGH_PRIORITY_CLASSIDLE_PRIORITY_CLASSNORMAL_PRIORITY_CLASSREALTIME_PRIORITY_CLASSCREATE_NO_WINDOWDETACHED_PROCESSCREATE_DEFAULT_ERROR_MODECREATE_BREAKAWAY_FROM_JOB)r   r   r   r   r   r   r   r   STARTUPINFOr   r   r   r   r   r   r   r    r!   r"   c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r'   r'   ^/Volumes/Data/workspace/med-macos-weekly/build/ExtProjs/pyncpp/python/source/Lib/subprocess.pyr   e   s    r   c                   @   :   e Zd Z	 d	ddZdd Zedd Zejdd ZdS )
r   Nc                 C      || _ || _|| _|| _d S N)
returncodecmdoutputstderr)selfr,   r-   r.   r/   r'   r'   r(   __init__o      
zCalledProcessError.__init__c                 C   s`   | j r(| j dk r(zd| jt| j  f W S  ty'   d| j| j  f  Y S w d| j| j f 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-   signalSignals
ValueErrorr0   r'   r'   r(   __str__u   s   

zCalledProcessError.__str__c                 C   s   	 | j S r+   r.   r6   r'   r'   r(   stdout   s   zCalledProcessError.stdoutc                 C   
   || _ d S r+   r8   r0   valuer'   r'   r(   r9         
NNr$   r%   r&   r1   r7   propertyr9   setterr'   r'   r'   r(   r   h   s    

r   c                   @   r)   )
r   Nc                 C   r*   r+   )r-   timeoutr.   r/   )r0   r-   rB   r.   r/   r'   r'   r(   r1      r2   zTimeoutExpired.__init__c                 C   s   d| j | jf S )Nz'Command '%s' timed out after %s seconds)r-   rB   r6   r'   r'   r(   r7      s   
zTimeoutExpired.__str__c                 C      | j S r+   r8   r6   r'   r'   r(   r9      s   zTimeoutExpired.stdoutc                 C   r:   r+   r8   r;   r'   r'   r(   r9      r=   r>   r?   r'   r'   r'   r(   r      s    

r   c                   @   s,   e Zd ZdddddddddZdd ZdS )r#   r   NdwFlags	hStdInput
hStdOutput	hStdErrorwShowWindowlpAttributeListc                C   s0   || _ || _|| _|| _|| _|pdg i| _d S )Nhandle_listrD   )r0   rE   rF   rG   rH   rI   rJ   r'   r'   r(   r1      s   zSTARTUPINFO.__init__c                 C   s@   | j  }d|v rt|d |d< t| j| j| j| j| j|dS )NrK   rD   )	rJ   copylistr#   rE   rF   rG   rH   rI   )r0   Z	attr_listr'   r'   r(   rL      s   
zSTARTUPINFO.copy)r$   r%   r&   r1   rL   r'   r'   r'   r(   r#      s
    	r#   c                   @   s2   e Zd ZdZejfddZdd Zdd ZeZ	dS )	HandleFc                 C   s   | j sd| _ ||  d S d S )NT)closed)r0   CloseHandler'   r'   r(   Close   s   zHandle.Closec                 C   s   | j s
d| _ t| S td)NTzalready closed)rO   intr5   r6   r'   r'   r(   Detach   s   zHandle.Detachc                 C   s   d| j jt| f S )Nz%s(%d))	__class__r$   rR   r6   r'   r'   r(   __repr__   s   zHandle.__repr__N)
r$   r%   r&   rO   _winapirP   rQ   rS   rU   __del__r'   r'   r'   r(   rN      s    rN   PIPE_BUFi   PollSelectorc                   C   s   d S r+   r'   r'   r'   r'   r(   _cleanup      rZ   c               	   C   sZ   t d u rd S t d d  D ]} | jtjd}|d ur*zt |  W q ty)   Y qw qd S )N
_deadstate)_active_internal_pollsysmaxsizeremover5   )instresr'   r'   r(   rZ      s   c                  C   s,   	 g } t jj}|dkr| dd|   | S )Nr   -O)r`   flagsoptimizeappend)argsr<   r'   r'   r(   "_optim_args_from_interpreter_flags  s   rn   c                  C   sP  	 ddddddd} t  }|  D ]\}}ttj|}|dkr(|d	||   qtjjr3|d
 ntjjr<|d tjjrE|d tj	d d  }tjj
}ttdi }d|v }|dkrd|d n|rk|d |rr|d |D ]	}|d|  qt|r|d dD ]}||v r|| }	|	du r|}
nd||	f }
|d|
f q|S )NdBSvbq)debugdont_write_bytecodeno_siteverbosebytes_warningquietr   rh   z-Iz-Ez-s	_xoptionsdev   zerror::BytesWarningzdefault::BytesWarningdefaultz-W)-Xr|   )ZfaulthandlertracemallocZ
importtimeZshowrefcountutf8Tz%s=%sr   )rn   itemsgetattrr`   rj   rl   isolatedignore_environmentno_user_sitewarnoptionsry   rb   extend)Zflag_opt_maprm   flagZoptrr   Zwarnoptsry   Zxoptionsdev_moder<   argr'   r'   r(   _args_from_interpreter_flags  sV   




r   rB   c                 O   sT   	 t |i |}z|j| dW W  d    S    |   1 s#w   Y  d S )Nr   )r   waitkill)rB   	popenargskwargspr'   r'   r(   r   Q  s   r   c                  O   s<   	 t | i |}|r|d}|d u r| d }t||dS )Nrm   r   )r   getr   )r   r   retcoder-   r'   r'   r(   r   b  s   	

r   c                 O   sx   	 d|v r	t dd|v r0|d d u r0|ds'|ds'|ds'|dr*d}nd	}||d< t|t| d
d|jS )Nr9   z3stdout argument not allowed, it will be overridden.inputuniversal_newlinestextencodingerrors     T)r9   rB   check)r5   r   r   r   r9   )rB   r   r   emptyr'   r'   r(   r
   u  s   "r
   c                   @   s2   e Zd Z	 dddZdd ZeejZdd Z	dS )	r   Nc                 C   r*   r+   )rm   r,   r9   r/   )r0   rm   r,   r9   r/   r'   r'   r(   r1     r2   zCompletedProcess.__init__c                 C   sh   d | jd | jg}| jd ur|d | j | jd ur(|d | j d t| jd|S )Nz	args={!r}zreturncode={!r}zstdout={!r}zstderr={!r}z{}({})z, )	formatrm   r,   r9   rl   r/   typer$   join)r0   rm   r'   r'   r(   rU     s   



zCompletedProcess.__repr__c                 C   s"   	 | j rt| j | j| j| jd S r+   )r,   r   rm   r9   r/   r6   r'   r'   r(   check_returncode  s   z!CompletedProcess.check_returncoder>   )
r$   r%   r&   r1   rU   classmethodtypesGenericAlias__class_getitem__r   r'   r'   r'   r(   r     s    


	r   )r   capture_outputrB   r   c                 O   s&  	 | d ur| dd urtdt|d< |r0| dd us$| dd ur(tdt|d< t|d< t|i |L}z|j| |d\}}W n' tyc }	 z|  trZ| \|	_|	_	 |
   d }	~	w   |   | }
|r||
r|t|
|j||dW d    n1 sw   Y  t|j|
||S )Nstdinz/stdin and input arguments may not both be used.r9   r/   z@stdout and stderr arguments may not be used with capture_output.r   r.   r/   )r   r5   r   r   communicater   r   
_mswindowsr9   r/   r   pollr   rm   r   )r   r   rB   r   r   r   processr9   r/   excr   r'   r'   r(   r     s@   r   c                 C   s   	 g }d}t tj| D ]d}g }|r|d d|v p d|v p | }|r(|d |D ]1}|dkr6|| q*|dkrM|dt| d  g }|d q*|rV|| g }|| q*|rc|| |ro|| |d qd|S )	NF 	"\   z\"r   )maposfsdecoderl   lenr   r   )seqresultZ	needquoter   Zbs_bufcr'   r'   r(   list2cmdline  s8   






r   c              
   C   sp   	 zt | ddtd}d}W n ty% } z|j}|j}W Y d }~nd }~ww |dd  dkr4|d d }||fS )NT)shellr   r/   r   re   
)r
   r   r   r.   r,   )r-   dataexitcodeexr'   r'   r(   r   \  s   r   c                 C   s   	 t | d S Nr}   )r   )r-   r'   r'   r(   r	   {  s   	r	   c               
   C   s   	 t sttds
dS tjdv rdS z<td} | jdd}t|dkr%t|d	 }t	t
t|d d
}tjdkrE|dkrH|dkrKW dS W dS W dS W dS  tttfyZ   Y dS w )Nposix_spawnF)darwinZsunos5TZCS_GNU_LIBC_VERSIONr}   )maxsplitr   r   .linuxZglibc)r      )r   hasattrr   r`   platformconfstrsplitr   r5   tupler   rR   AttributeErrorOSError)ZverpartsZlibcversionr'   r'   r(   _use_posix_spawn  s0   

r   c                
   @   s  e Zd Z	 dZ							dLddddddddddd	Zd
d ZeejZ	e
dd Zej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dMddZdd Zdd  Z	dNd!d"ZdOd#d$Zd%d& Zerd'd( Zd)d* Zd+d, Z d-d. Z!de"j#e"j$e"j%fd/d0Z&d1d2 Z'd3d4 Z(d5d6 Z)d7d8 Z*d9d: Z+e+Z,dS d;d( Zd<d= Z-d>d. Z!e.j/e.j0e.j1fd?d@Z2de.j3e.j4e5j6fdAd0Z&dBdC Z7dDd2 Z'dEd6 Z)dFdG Z8dHd8 Z*dId: Z+dJdK Z,dS )Pr   Fre   NTr   r'   )usergroupextra_groupsr   r   r   umaskpipesizec          +      C   s  	 t   t | _d | _d| _|d u rd}t|tstd|d u r$d}t|ts-tdt	r8|d ur7t
dn|rD|sDtdt d}|d urLt
d|d	krTt
d
|| _d | _d | _d | _d | _d | _|| _|| _|| _|d ur|d urt|t|krtd| |||\}}}}}}t	r|dkrt| d	}|dkrt| d	}|dkrt| d	}|p|p|p|| _| jr|d u rd | _}d| _d| _| jr|dkrd} d}nd} d }!|d ur-t t!dst
dt|t"rzd	d l#}"W n t$y   t
dw |"%|j&}!nt|tr|}!n	td't(||!d	k r-t
d|! d }#|d urt t!ds>t
dt|t"rHt
dg }#|D ];}$t|$t"rrzd	d l#}"W n t$yf   t
dw |#)|"%|$j& qLt|$tr|#)|$ qLtd't(|$|#D ]}%|%d	k rt
d|% qd }&|d urt t!dst
dt|t"rzd	d l*}'W n t$y   t
dw |'+|j,}&nt|tr|}&ntd|&d	k rt
d|& zp|dkrt-.|d|| _| jrt-j/| jd| ||d| _|dkrt-.|d || _| jrt-j/| j||d!| _|dkr8t-.|d || _| jr8t-j/| j||d!| _| 0||||||
||||	||||||||!|#|&|| W d S    t1d | j| j| jfD ]}(z|(2  W qc t3yw   Y qcw | jsg })|t4kr|))| |t4kr|))| |t4kr|))| t | d"r|))| j5 |)D ]#}*zt	rt|*t6r|*7  nt!2|* W q t3y   Y qw  )#NFre   zbufsize must be an integerzpipesize must be an integerz0preexec_fn is not supported on Windows platformszpass_fds overriding close_fds.Tz2startupinfo is only supported on Windows platformsr   z4creationflags is only supported on Windows platformszlCannot disambiguate when both text and universal_newlines are supplied but different. Pass one or the other.localeg      ?r}   setregidz>The 'group' parameter is not supported on the current platformzHThe group parameter cannot be a string on systems without the grp modulez,Group must be a string or an integer, not {}z!Group ID cannot be negative, got 	setgroupszEThe 'extra_groups' parameter is not supported on the current platformz#Groups must be a list, not a stringzIItems in extra_groups cannot be strings on systems without the grp modulez9Items in extra_groups must be a string or integer, not {}setreuidz=The 'user' parameter is not supported on the current platformzGThe user parameter cannot be a string on systems without the pwd modulez#User must be a string or an integerz User ID cannot be negative, got wb)write_throughline_bufferingr   r   rb)r   r   _devnull)8rZ   	threadingLock_waitpid_lock_input_communication_started
isinstancerR   	TypeErrorr   r5   warningswarnRuntimeWarningrm   r   r9   r/   pidr,   r   r   r   boolr   _get_handlesmsvcrtopen_osfhandlerS   	text_mode_sigint_wait_secs_closed_child_pipe_fdsr   r   strgrpImportErrorZgetgrnamZgr_gidr   r   rl   pwdgetpwnamZpw_uidioopenTextIOWrapper_execute_childfiltercloser   r   r   rN   rQ   )+r0   rm   bufsize
executabler   r9   r/   
preexec_fn	close_fdsr   cwdenvr   startupinfocreationflagsrestore_signalsstart_new_sessionpass_fdsr   r   r   r   r   r   r   r   p2creadp2cwritec2preadc2pwriteerrreaderrwriter   gidr   gidsZextra_groupZ	gid_checkuidr   fZto_closefdr'   r'   r(   r1     sX  

















	







zPopen.__init__c                 C   s@   d| j j d| j d| jd}t|dkr|d d d }|S )N<z: returncode: z args: >P   L   z...>)rT   r$   r,   rm   r   )r0   Zobj_reprr'   r'   r(   rU     s   zPopen.__repr__c                 C   rC   r+   )r   r6   r'   r'   r(   r     s   zPopen.universal_newlinesc                 C   s   t || _d S r+   )r   r   )r0   r   r'   r'   r(   r     s   c                 C   s    | ||}|ddddS )Nz
r   )decodereplace)r0   r   r   r   r'   r'   r(   _translate_newlines  s   zPopen._translate_newlinesc                 C   s   | S r+   r'   r6   r'   r'   r(   	__enter__
  r[   zPopen.__enter__c                 C   s   | j r| j   | jr| j  z0| jr| j  W |tkr;| jdkr6z	| j| jd W n	 ty5   Y nw d| _d S |   d S |tkrf| jdkr]z	| j| jd W n	 ty\   Y nw d| _   Y d S |   w )Nr   r   )	r9   r   r/   r   KeyboardInterruptr   _waitr   r   )r0   exc_typer<   	tracebackr'   r'   r(   __exit__  s8   





zPopen.__exit__c                 C   s\   | j sd S | jd u r|d| j t| d | j|d | jd u r*td ur,t|  d S d S d S )Nzsubprocess %s is still running)sourcer\   )_child_createdr,   r   ResourceWarningr_   r^   rl   )r0   Z_maxsizeZ_warnr'   r'   r(   rW   )  s   

zPopen.__del__c                 C   s"   t | dsttjtj| _| jS )Nr   )r   r   r   devnullO_RDWRr   r6   r'   r'   r(   _get_devnull8  s   
zPopen._get_devnullc              
   C   s   |r-z| j | W n" ty   Y n ty, } z|jtjkr!n W Y d }~nd }~ww z| j   W d S  ty?   Y d S  tyY } z|jtjkrMn W Y d }~d S d }~ww r+   )r   writeBrokenPipeErrorr   errnoZEINVALr   )r0   r   r   r'   r'   r(   _stdin_write=  s.   	zPopen._stdin_writec                 C   sT  	 | j r
|r
td|d u rN| j sN| j| j| jgd dkrNd }d }| jr+| | n| jr9| j }| j  n| jrF| j }| j  | 	  ||fS |d urXt
 | }nd }z>z| |||\}}W n- ty   |d ur{t| j| |}n| j}d| _z| j|d W   ty   Y  w w W d| _ nd| _ w | j	| |d}||fS )Nz.Cannot send input after starting communicationr   r   r   T)r   r5   r   r9   r/   countr)  readr   r   _time_communicater  minr   _remaining_timer  r   )r0   r   rB   r9   r/   endtimesigint_timeoutstsr'   r'   r(   r   V  sR   



zPopen.communicatec                 C   s
   	 |   S r+   )r_   r6   r'   r'   r(   r     s   z
Popen.pollc                 C   s   	 |d u rd S |t   S r+   )r,  )r0   r0  r'   r'   r(   r/    s   
zPopen._remaining_timec                 C   sR   	 |d u rd S |st  |kr't| j||rd|nd |r#d|dd dd S )Nr   r   )r,  r   rm   r   )r0   r0  orig_timeoutZ
stdout_seqZ
stderr_seqskip_check_and_raiser'   r'   r(   _check_timeout  s   zPopen._check_timeoutc                 C   s~   	 |d ur
t  | }z| j|dW S  ty>   |d ur&t| j| |}n| j}d| _z| j|d W   ty=   Y  w w )Nr   r   )r,  r  r  r.  r   r/  r   )r0   rB   r0  r1  r'   r'   r(   r     s(   
z
Popen.waitc           	      C   s  t | dd }t m}tr,|dkr||j |dkr!||j |dkr+||j n9|dkr?|dkr?||kr?|tj| |dkrR|dkrR||krR|tj| |dkre|dkre||kre|tj| |d urp|tj| W d    n1 szw   Y  d| _d S )Nr   re   T)	r   
contextlib	ExitStackr   callbackrQ   r   r   r   )	r0   r  r  r	  r
  r  r  Z
devnull_fdstackr'   r'   r(   _close_pipe_fds  s*   

zPopen._close_pipe_fdsc                 C   sr  	 |d u r|d u r|d u rdS d\}}d\}}d\}}	|d u r;t t j}|d u r:t d d\}}
t|}t |
 n4|tkrQt d d\}}t|t|}}n|tkr]t	| 
 }nt|trht	|}nt	| }| |}|d u rt t j}|d u rt d d\}
}t|}t |
 n4|tkrt d d\}}t|t|}}n|tkrt	| 
 }nt|trt	|}nt	| }| |}|d u rt t j}	|	d u rt d d\}
}	t|	}	t |
 n?|tkrt d d\}}	t|t|	}}	n(|tkr|}	n |tkrt	| 
 }	nt|tr%t	|}	nt	| }	| |	}	||||||	fS )N)re   re   re   re   re   re   re   re   r   )rV   ZGetStdHandler   Z
CreatePiperN   rP   r   r   r   Zget_osfhandler%  r   rR   fileno_make_inheritabler   r   r   )r0   r   r9   r/   r  r  r	  r
  r  r  _r'   r'   r(   r     sx   










zPopen._get_handlesc                 C   s(   	 t t  |t  ddt j}t|S )Nr   r}   )rV   ZDuplicateHandleZGetCurrentProcessZDUPLICATE_SAME_ACCESSrN   )r0   handlehr'   r'   r(   r=  4  s   
zPopen._make_inheritablec                 C   s   	 t dd |D S )Nc                 S   s,   h | ]}|d @ d kst |t jkr|qS )   )rV   ZGetFileTypeZFILE_TYPE_CHAR).0r?  r'   r'   r(   	<setcomp>D  s    z,Popen._filter_handle_list.<locals>.<setcomp>)rM   )r0   rK   r'   r'   r(   _filter_handle_list=  s   zPopen._filter_handle_listc                  C   s,  	 t |trn't |tr|
rtdt|g}nt |tjr*|
r$tdt|g}nt|}|d ur7t|}|d u r?t }n|	 }d|||fv}|r]| j
tjO  _
||_||_||_|j}t|ojd|v oj|d }|sr|r|r|d u r{i  }|_t|dg  }|d< |r|t|t|t|g7 }| ||d d < |r|stdt d}|
r| j
tjO  _
tj|_tjdd}d	||}|d urt|}td
|||| z t ||d d t| |	|||	\}}}}W | !|||||| n| !|||||| w d| _"t#|| _$|| _%t&| d S )Nz$bytes args is not allowed on Windows0path-like args is not allowed when shell is truere   rK   z?startupinfo.lpAttributeList['handle_list'] overriding close_fdsFZCOMSPECzcmd.exez
{} /c "{}"subprocess.PopenT)'r   r   bytesr   r   r   PathLiker   r#   rL   rE   rV   r   rF   rG   rH   rJ   r   rM   r   rR   rD  r   r   r   r   r   rI   environr   r`   auditZCreateProcessr:  r!  rN   _handler   rP   ) r0   rm   r   r   r   r  r   r  r  r  r   r  r  r	  r
  r  r  Zunused_restore_signalsZ
unused_gidZunused_gidsZ
unused_uidZunused_umaskZunused_start_new_sessionZuse_std_handlesZattribute_listZhave_handle_listrK   ZcomspecZhpZhtr   tidr'   r'   r(   r   J  s   







zPopen._execute_childc                 C   s.   	 | j d u r|| jd|kr|| j| _ | j S Nr   )r,   rK  )r0   r]   Z_WaitForSingleObjectZ_WAIT_OBJECT_0Z_GetExitCodeProcessr'   r'   r(   r_     s
   
zPopen._internal_pollc                 C   s`   	 |d u r	t j}nt|d }| jd u r-t | j|}|t jkr&t| j|t 	| j| _| jS )Ni  )
rV   ZINFINITErR   r,   WaitForSingleObjectrK  ZWAIT_TIMEOUTr   rm   GetExitCodeProcess)r0   rB   Ztimeout_millisr   r'   r'   r(   r    s   

zPopen._waitc                 C   s   | |  |  d S r+   )rl   r+  r   )r0   Zfhbufferr'   r'   r(   _readerthread  s   zPopen._readerthreadc                 C   sT  | j r!t| ds!g | _tj| j| j | jfd| _d| j_| j  | j	rBt| dsBg | _
tj| j| j	| j
fd| _d| j_| j  | jrJ| | | j d urc| j| | | j rct| j|| j	d ur|| j| | | j r|t| j|d }d }| j r| j}| j   | j	r| j
}| j	  |r|d nd }|r|d nd }||fS )N_stdout_buff)targetrm   T_stderr_buffr   )r9   r   rR  r   ThreadrQ  Zstdout_threaddaemonstartr/   rT  Zstderr_threadr   r)  r   r/  is_aliver   rm   r   )r0   r   r0  r3  r9   r/   r'   r'   r(   r-    sJ   










zPopen._communicatec                 C   sp   	 | j d urd S |tjkr|   d S |tjkr"t| jtj d S |tjkr1t| jtj d S t	d
|)NzUnsupported signal: {})r,   r3   SIGTERM	terminateZCTRL_C_EVENTr   r   r   ZCTRL_BREAK_EVENTr5   r   r0   Zsigr'   r'   r(   send_signal  s   



zPopen.send_signalc                 C   sX   	 | j d urd S z
t| jd W d S  ty+   t| j}|tjkr% || _ Y d S w r   )r,   rV   ZTerminateProcessrK  PermissionErrorrO  ZSTILL_ACTIVE)r0   rcr'   r'   r(   rZ    s   

zPopen.terminatec           
      C   s  	 d\}}d\}}d\}}	|d u rn3|t kr0t \}}| jdkr/ttdr/t|tj| j n|tkr9|  }nt	|t
rA|}n| }|d u rJn3|t krht \}}| jdkrgttdrgt|tj| j n|tkrq|  }nt	|t
ry|}n| }|d u rnD|t krt \}}	| jdkrttdrt|	tj| j n&|tkr|dkr|}	ntj }	n|tkr|  }	nt	|t
r|}	n| }	||||||	fS )Nr;  r   F_SETPIPE_SZre   )r   r   piper   r   fcntlr_  r   r%  r   rR   r<  r   r`   
__stdout__)
r0   r   r9   r/   r  r  r	  r
  r  r  r'   r'   r(   r   4  s`   





c                 C   s   	 |d u rt j}i }|r&g }dD ]}tt|d }|d ur!|| q||d< g }|||	fD ]}|dkr;|t j|f q-|df|df|
dffD ]\}}|dkrX|t j||f qG|r_||d< t j|||fi || _d| _	| 
|||||	|
 d S )	N)SIGPIPEZSIGXFZSIGXFSZZ	setsigdefre   r   r}   r   file_actionsT)r   rI  r   r3   rl   POSIX_SPAWN_CLOSEPOSIX_SPAWN_DUP2r   r   r!  r:  )r0   rm   r   r  r  r  r  r	  r
  r  r  r   sigsetZsignamesignumre  r  Zfd2r'   r'   r(   _posix_spawnp  s@   
zPopen._posix_spawnc           -         s  	 t |ttfr|g}nt |tjr|
rtd|g}nt|}|
r7ttdr)dnd}|dg| } r7 |d<  d u r?|d  t	d ||| t
rtj r|d u r|s|s|d u r|dksd|d	kr|dksl|d	kr|dkst|d	kr|s|d u r|d u r|d u r|dk r| | ||||||||
 d S  }t \}}g }|d
k r|| t|}|d
k s|D ]}t| qzz||d urg }| D ]\}}t|}d|v rtd||d t|  qnd }t  tj r f} nt fddt|D } t|}!|!| t|| |tttt|!|||||||||||||||||| _d| _W t| nt| w |  |||||| t! }"	 t"|d}#|"|#7 }"|#rbt#|"dkrcnqNW t| nt| w |"rzt$| jd\}$}%|$| jkr| %|% ntj&| _'W n
 t(y   Y nw z|")dd	\}&}'}(|(* }(W n ty   d}&d}'d+t|"}(Y nw t,t-|&*dt.})t/|)t0r|'rt|'d}*|(dk}+|+rd}(|},n|},|*dkrt1|*}(|)|*|(|,|)|(d S )NrE  getandroidapilevelz/system/bin/shz/bin/shz-cr   rF  re   r   rA     =z!illegal environment variable namec                 3   s$    | ]}t jt | V  qd S r+   )r   pathr   fsencode)rB  dirr   r'   r(   	<genexpr>  s
    
z'Popen._execute_child.<locals>.<genexpr>TiP     :s   SubprocessError   0z#Bad exception data from child: {!r}ascii   Znoexecr   )2r   r   rG  r   rH  r   rM   r   r`   rJ  _USE_POSIX_SPAWNrm  dirnamerj  r`  rl   dupr   r   rn  r5   r   get_exec_pathsetadd_posixsubprocess	fork_execsortedr   rR   r   r!  r:  	bytearrayr+  r   waitpid_handle_exitstatusra   r,   ChildProcessErrorr   r  r   r   builtinsr   
issubclassr   strerror)-r0   rm   r   r   r   r  r   r  r  r  r   r  r  r	  r
  r  r  r  r  r  r  r   r  Z
unix_shellZorig_executableerrpipe_readerrpipe_writeZlow_fds_to_closeZlow_fdZenv_listkrr   Zexecutable_listZfds_to_keepZerrpipe_datapartr   r2  Zexception_nameZ	hex_errnoerr_msgZchild_exception_typeZ	errno_numZchild_exec_never_calledZerr_filenamer'   rp  r(   r     s  	











c                 C   s(   	 ||r|| | _ d S ||| _ d S r+   )r,   )r0   r2  waitstatus_to_exitcodeZ_WIFSTOPPEDZ	_WSTOPSIGr'   r'   r(   r  ;  s   zPopen._handle_exitstatusc              
   C   s   	 | j d u rm| jdsd S zXz#| j d ur| j W W | j  S || j|\}}|| jkr1| | W n" tyT } z|d urB|| _ n|j|krJd| _ W Y d }~nd }~ww W | j  | j S W | j  | j S | j  w | j S )NFr   )r,   r   acquirereleaser   r  r   r(  )r0   r]   Z_waitpidZ_WNOHANGZ_ECHILDr   r2  er'   r'   r(   r_   G  s6   






c                 C   sB   	 zt | j|\}}W ||fS  ty    | j}d}Y ||fS w rM  )r   r  r   r  )r0   Z
wait_flagsr   r2  r'   r'   r(   	_try_waitj  s   zPopen._try_waitc                 C   s^  	 | j d ur	| j S |d urot | }d}	 | jdrRz0| j d ur*W | j  | j S | tj\}}|| jkrE| 	| W | j  | j S W | j  n| j  w | 
|}|dkrat| j|t|d |d}t| q| j d u r| j( | j d ur	 W d    | j S | d\}}|| jkr| 	| W d    n1 sw   Y  | j d u st| j S )NgMb@?TFr   r   g?)r,   r,  r   r  r  r  r   WNOHANGr   r  r/  r   rm   r.  timesleep)r0   rB   r0  Zdelayr   r2  Z	remainingr'   r'   r(   r  w  sP   










	



c              
   C   s$  | j r*| js*z| j   W n	 ty   Y nw |s*z| j   W n	 ty)   Y nw d }d }| jsFi | _| jr=g | j| j< | jrFg | j| j< | jrO| j| j }| jrX| j| j }| | | j	ret
| j	}t }| j rv|rv|| j tj | jr| jjs|| jtj | jr| jjs|| jtj | r=| |}|d ur|dk r| j||||dd td||}	| |||| |	D ]u\}
}|
j| j u r|| j| jt  }z|  jt|
j|7  _W n ty   ||
j |
j  Y qw | jt| j	kr||
j |
j  q|
j| j| jfv r8t|
jd}|s/||
j |
j  | j|
j | q| sW d    n	1 sHw   Y  | j | |d |d ur`d!|}|d urjd!|}| j"r|d ur~| #|| jj$| jj%}|d ur| #|| jj$| jj%}||fS )Nr   T)r4  zN_check_timeout(..., skip_check_and_raise=True) failed to raise TimeoutExpired.i   r   r   )&r   r   flushr'  r   Z_fileobj2outputr9   r/   _save_inputr   
memoryview_PopenSelectorregister	selectorsEVENT_WRITErO   
EVENT_READget_mapr/  r5  RuntimeErrorselectfileobj_input_offset	_PIPE_BUFr   r&  r  
unregisterr   r+  rl   r   r   r   r  r   r   )r0   r   r0  r3  r9   r/   Z
input_viewselectorrB   readykeyeventschunkr   r'   r'   r(   r-    s   







,





c                 C   sV   | j r#| jd u r%d| _|| _|d ur'| jr)| j| j j| j j| _d S d S d S d S d S rM  )r   r   r  r   encoder   r   )r0   r   r'   r'   r(   r    s   
zPopen._save_inputc                 C   sB   	 |    | jd urd S z
t| j| W d S  ty    Y d S w r+   )r   r,   r   r   r   ProcessLookupErrorr[  r'   r'   r(   r\    s   
c                 C      	 |  tj d S r+   )r\  r3   rY  r6   r'   r'   r(   rZ  2     c                 C   r  r+   )r\  r3   SIGKILLr6   r'   r'   r(   r   7  r  z
Popen.kill)re   NNNNNTFNNNNr   TFr'   r>   )Fr+   )9r$   r%   r&   r!  r1   rU   r   r   r   r   r@   r   rA   r  r  r  r`   ra   r   r   rW   r%  r)  r   r   r/  r5  r   r:  r   r   r=  rD  r   rV   rN  ZWAIT_OBJECT_0rO  r_   r  rQ  r-  r\  rZ  r   rj  r   r  
WIFSTOPPEDWSTOPSIGr  r  r  r(  ZECHILDr  r  r'   r'   r'   r(   r     s    5
 |
	


D	

H	o
2<' &

#)f r   )Kr  r(  r   r   r  r3   r`   r   r   r6  r   r,  r   ra  r   __all__r   rV   r   ModuleNotFoundErrorr|  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r   	Exceptionr   r   r   r#   rR   rN   r   r  r   rY   r  SelectSelectorr^   rZ   r   r   r   rn   r   r   r   r
   objectr   r   r   r   r	   r   rv  Z
_USE_VFORKr   r'   r'   r'   r(   <module>   s   "P
%
	

;4%FI2