] @sddlZddlZddlZddlZddlZddlmZddlmZddlmZddlm Z dgZ dZ ej d koe ed d Zejjjd ZGd ddeZdS)N)context)spawn) reduction)utilPopeniwin32frozenFzpythonservice.exec@sUeZdZdZddZddZdddZd d Zd d ZdS) rrc Cstj|j}tjdd\}}tj|d}tjdtj d|}dj dd|D}t |ddd }yJtj tj |ddd dddd \}} } } tj| Wntj|YnX| |_d|_||_t||_tj|tj|jftj|z$tj||tj||WdtjdXWdQRXdS) NrZ parent_pidZ pipe_handle css|]}d|VqdS)z"%s"N).0xr r 6/opt/alt/python35/lib64/python3.5/popen_spawn_win32.py *sz!Popen.__init__..wbclosefdTF)rZget_preparation_data_name_winapiZ CreatePipemsvcrtopen_osfhandleZget_command_lineosgetpidjoinopenZ CreateProcessZget_executableZ CloseHandlepid returncode_handleintsentinelrFinalizerset_spawning_popenrdump) self process_objZ prep_dataZrhandleZwhandleZwfdcmdZto_childZhpZhtrtidr r r__init__!s2  '     zPopen.__init__cCstj||jS)N)rZ duplicater)r"handler r rduplicate_for_childFszPopen.duplicate_for_childNcCs|jdkr|dkr'tj}ntdt|dd}tjt|j|}|tjkrtj|j}|t krt j }||_|jS)Nrig?) rrZINFINITEmaxrZWaitForSingleObjectrZ WAIT_OBJECT_0ZGetExitCodeProcess TERMINATEsignalSIGTERM)r"timeoutmsecsrescoder r rwaitJs     z Popen.waitcCs|jddS)Nr-r)r1)r"r r rpollZsz Popen.pollc Cs`|jdkr\ytjt|jtWn-tk r[|jdddkrWYnXdS)Nr-g?)rrZTerminateProcessrrr*OSErrorr1)r"r r r terminate]s  zPopen.terminate) __name__ __module__ __qualname__methodr&r(r1r2r4r r r rrs  %  )rrr+sysrrrrr__all__r*platformgetattrZWINEXE executablelowerendswithZ WINSERVICEobjectrr r r rs      !