U e5d«ã@s¸ddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d ƒZej ¡ d ¡Zd d „Zeejejƒ Zdd„ZGdd„deƒZdS)éNé)Ú reductionÚget_spawning_popenÚset_spawning_popen)Úspawn)ÚutilÚPopeniZwin32ÚfrozenFzpythonservice.execCs ||kptj |¡tj |¡kS©N)ÚosÚpathÚnormcase)Zp1Zp2©rú9/usr/lib64/python3.8/multiprocessing/popen_spawn_win32.pyÚ_path_eqsrcGs|D]}t |¡qdSr )Ú_winapiÚ CloseHandle)ZhandlesÚhandlerrrÚ_close_handlessrc@sJeZdZdZdZdd„Zdd„Zddd „Zd d „Zd d „Z e Z dd„Z dS)rz@ Start a subprocess to run the code of a process object rc CsTt |j¡}t dd¡\}}t |d¡}tjt  ¡|d�}d  dd„|Dƒ¡}t  ¡}t r‚t |tjƒr‚tj}tj ¡}tj|d<nd}t|ddd ��¶} z0t ||ddd d|dd¡ \} } } } t | ¡Wnt |¡‚YnX| |_d|_| |_t| ƒ|_t |t|jt|ƒf¡|_t|ƒzt  !|| ¡t  !|| ¡W5tdƒXW5QRXdS) Nr)Z parent_pidZ pipe_handleú css|]}d|VqdS)z"%s"Nr)Ú.0ÚxrrrÚ 9sz!Popen.__init__..Ú__PYVENV_LAUNCHER__ÚwbT)ÚclosefdF)"rZget_preparation_dataÚ_namerZ CreatePipeÚmsvcrtZopen_osfhandleZget_command_liner ÚgetpidÚjoinZget_executableÚWINENVrÚsysÚ executableÚ_base_executableÚenvironÚcopyÚopenZ CreateProcessrÚpidÚ returncodeÚ_handleÚintÚsentinelrZFinalizerÚ finalizerrrÚdump)ÚselfZ process_objZ prep_dataZrhandleZwhandleZwfdÚcmdZ python_exeÚenvZto_childZhpZhtr'ÚtidrrrÚ__init__,sT   ÿ  þ    ÿ zPopen.__init__cCs|tƒkst‚t ||j¡Sr )rÚAssertionErrorrZ duplicater+)r.rrrrÚduplicate_for_childaszPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|ddƒƒ}t t|jƒ|¡}|tjkrnt |j¡}|t krht j }||_|jS)Nriègà?) r(rZINFINITEÚmaxr*ZWaitForSingleObjectr)Z WAIT_OBJECT_0ZGetExitCodeProcessÚ TERMINATEÚsignalÚSIGTERM)r.ÚtimeoutZmsecsÚresÚcoderrrÚwaites   z Popen.waitcCs |jdd�S)Nr©r9)r<©r.rrrÚpollusz Popen.pollcCsL|jdkrHzt t|jƒt¡Wn&tk rF|jdd�dkrB‚YnXdS)Ngð?r=)r(rZTerminateProcessr*r)r6ÚOSErrorr<r>rrrÚ terminatexs  zPopen.terminatecCs | ¡dSr )r,r>rrrÚclose‚sz Popen.close)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__Úmethodr2r4r<r?rAÚkillrBrrrrr&s5 )r rr7r!rÚcontextrrrÚrrÚ__all__r6ÚplatformÚgetattrZWINEXEr"ÚlowerÚendswithZ WINSERVICErr#r rÚobjectrrrrrÚs