B !xG@sddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d Zejd Zd d Zeedoeejej ZddZGdddeZdS)N) reductionget_spawning_popenset_spawning_popen)spawn)utilPopeniZwin32frozenFzpythonservice.execCs ||kptj|tj|kS)N)ospathnormcase)Zp1Zp2r D/opt/alt/python37/lib/python3.7/multiprocessing/popen_spawn_win32.py_path_eqsr_base_executablecGsx|D]}t|qWdS)N)_winapi CloseHandle)Zhandleshandler r r_close_handless rc@sJeZdZdZdZddZddZddd Zd d Zd d Z e Z ddZ dS)rz@ Start a subprocess to run the code of a process object rc CsPt|j}tdd\}}t|d}tjt |d}d dd|D}t }t rt |tjrtj}tj}tj|d<nd}t|ddd } y0t||ddd d|dd \} } } } t| Wnt|YnX| |_d|_| |_t| |_t|tj|jf|_t|zt || t || WdtdXWdQRXdS) Nr)Z parent_pidZ pipe_handle css|]}d|VqdS)z"%s"Nr ).0xr r r 6sz!Popen.__init__..__PYVENV_LAUNCHER__wbT)closefdF)!rZget_preparation_data_namerZ CreatePipemsvcrtZopen_osfhandleZget_command_liner getpidjoinZget_executableWINENVrsys executablerenvironcopyopenZ CreateProcessrpid returncode_handleintsentinelrZFinalize finalizerrrdump)selfZ process_objZ prep_dataZrhandleZwhandleZwfdcmdZ python_exeenvZto_childZhpZhtr&tidr r r__init__-s>        zPopen.__init__cCs|tkstt||jS)N)rAssertionErrorrZ duplicater*)r-rr r rduplicate_for_child]szPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd}tt|j|}|tjkrnt|j}|t krht j }||_|jS)Nrig?) r'rZINFINITEmaxr)ZWaitForSingleObjectr(Z WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)r-timeoutZmsecsZrescoder r rwaitas   z Popen.waitcCs |jddS)Nr)r8)r:)r-r r rpollqsz Popen.pollcCsL|jdkrHytt|jtWn&tk rF|jdddkrBYnXdS)Ng?)r8)r'rZTerminateProcessr)r(r5OSErrorr:)r-r r r terminatets  zPopen.terminatecCs |dS)N)r+)r-r r rclose~sz Popen.close)N) __name__ __module__ __qualname____doc__methodr1r3r:r;r=killr>r r r rr's0 )r rr6r!rcontextrrrrr__all__r5platformgetattrZWINEXEr"lowerendswithZ WINSERVICErhasattrrr robjectrr r r rs