o ?OgP$@sddlZddlZddlZddlZddlmZmZddlmZddlm Z ddlm Z gdZ ej dkr8d Z d Zneed d Z ejd ZerQejejd anejad dZddZddZddZddZd'ddZddZddZddZgZ dd Z!d!d"Z"d#d$Z#d%d&Z$dS)(N)get_start_methodset_start_method)process) reduction)util)_mainfreeze_supportset_executableget_executableget_preparation_dataget_command_lineimport_main_pathwin32Ffrozenzpythonservice.exez python.execCs|adSN _python_exe)Zexers   r cKsf ttddrtjdgdd|DSd}|ddd |D;}t}tg|d |dgS) NrFrcSsg|]}d|qS)%s=%rr.0itemrrr Tsz$get_command_line..zWsz#get_command_line..z-c)getattrr executableitemsjoinrZ_args_from_interpreter_flagsr)r"progZoptsrrrr Ns r c Cs tjdkr1ddl}ddl}|dur||j|jBd|}nd}tj||d}| |t j }|}nddl m } || j_|}t |}t||} t| dS)NrrF)source_processr)resource_tracker)rplatformmsvcrt_winapiZ OpenProcessZ SYNCHRONIZEZPROCESS_DUP_HANDLErZ duplicateZopen_osfhandleosO_RDONLYr2Z_resource_trackerZ_fdduprr!) Z pipe_handleZ parent_pidZ tracker_fdr4r5r1Z new_handlefdparent_sentinelr2Zexitcoderrrr \s*     r c Cs|tj|ddd)}dt_ztj|}t|tj|}Wt`nt`wWdn1s4wY| |S)NrbT)closefd) r6fdopenrcurrent_process _inheritingrpickleloadprepare _bootstrap)r:r;Z from_parentZpreparation_dataselfrrrrxs   rcCsttddr tddS)Nr@Fa An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.)r,rr? RuntimeErrorrrrr_check_not_importing_mainsrGcCs tttjtjd}tjdurtj|d<t j }z| d}Wn t y/Ynwtj||<|j||t jtjttdt jd}t|jdd}|dur[||d<|St jdksdtstst|d d}|durtj |stjdurtj tj|}tj ||d <|S) N) log_to_stderrauthkey log_levelr8)r$sys_pathsys_argvorig_dirdir start_method__main__r$init_main_from_namer__file__init_main_from_path)rGdictrZ_log_to_stderrrr?rIZ_loggerZgetEffectiveLevelrpathcopyindex ValueError ORIGINAL_DIRupdaterr6getcwdrmodulesr,__spec__r3WINEXE WINSERVICEisabsr/normpath)r$drKi main_moduleZ main_mod_name main_pathrrrr sH         r cCs d|vr |dt_d|vr|dt_d|vr#|dr#td|vr0t|dd|vr9|dt_ d|vrB|dt_ d|vrMt |dd|vrV|dt_ d |vrbt|d d d d |vrnt|d dSd |vrzt|d dSdS)Nr$rIrHrJrKrLrNrMrOT)ZforcerQrS)rr?r$rIrrHZ get_loggerZsetLevelrrUrr6chdirrYr_fixup_main_from_name_fixup_main_from_path)datarrrrCs0   rCcCs~tjd}|dks|drdSt|jdd|krdSt|td}t j |ddd}|j ||tjd<tjd<dS)NrPz .__main__r$ __mp_main__T)run_nameZ alter_sys) rr\endswithr,r]old_main_modulesappendtypes ModuleTyperunpyZ run_module__dict__rZ)Zmod_name current_mainrd main_contentrrrrgs    rgcCstjd}tjtj|d}|dkrdSt|dd|kr!dSt|t d}t j |dd}|j ||tjd<tjd<dS)NrPrZipythonrRrj)rk)rr\r6rUsplitextbasenamer,rmrnrorprqZrun_pathrrrZ)rersZ main_namerdrtrrrrh s    rhcCs t|dSr)rh)rerrrr%s r)NN)%r6rrqror8rrrcontextrr__all__r3r^r_r,r-lowerrlrUr/ exec_prefixrr r rr r r rrGr rmrCrgrhrrrrrs>         2&