a „oe ã@s†ddlZddlZddlZddlZddlmZGdd„dƒZdd„ZGdd„dƒZddej fd d „Z d d „Z e d kr‚ddl Z e  ¡dS)éN)Úwinoutc@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) Ú ThreadWriterzRAssign an instance to sys.stdout for per-thread printing objects - Courtesy Guido!cCsi|_d|_dS)z.Constructor -- initialize the table of writersN)ÚwritersÚ origStdOut©Úself©rú@C:\Program Files\Certbot\pkgs\pythonwin\pywin\Demos\cmdserver.pyÚ__init__szThreadWriter.__init__cCs*||jt ¡<|jdur&tj|_|t_dS)z*Register the writer for the current threadN)rÚ_threadÚ get_identrÚsysÚstdout)rÚwriterrrr Úregisters zThreadWriter.registercCsDz|jt ¡=Wnty"Yn0t|jƒdkr@|jt_d|_dS)z0Remove the writer for the current thread, if anyrN)rr r ÚKeyErrorÚlenrr rrrrr Ú unregisters zThreadWriter.unregistercCs.z|jt ¡WSty(|jYS0dS)z6Return the current thread's writer, default sys.stdoutN)rr r rrrrrr Ú getwriter&s zThreadWriter.getwritercCs| ¡ |¡dS)z8Write to the current thread's writer, default sys.stdoutN)rÚwrite)rÚstrrrr r-szThreadWriter.writeN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrrrrrrr r s  rcCs4d}|dkr0tdt|ƒƒt d¡|d}qdS)NéièzHello there no é2)ÚprintrÚwin32apiZSleep)Znumrrr ÚTest2s  rc@seZdZdZdZdZdZdS)ÚflagsrrééN)rrrÚ SERVER_BESTZSERVER_IMMEDIATEZ SERVER_THREADZSERVER_PROCESSrrrr r :sr cCs<t |dtjj¡}|s|}| |¡t t||||f¡dS)N)rZ WindowOutputr ZWQ_IDLEZCreater Ústart_new_threadÚ ServerThread)ÚcmdÚtitleÚ bCloseOnEndZ serverFlagsÚoutrrr Ú StartServerAs  r*c Csæz¤t |¡td|ƒd}zddl}t|d|jƒWnd}Yn0|rXtdƒn0t ¡\}}}t|d|ƒt  |¡d}tdƒt  ¡|r¢|r¢|j   ¡Wn<t ¡\}}}t|d|ƒt  |¡d}tdƒYn0dS) NzExecuting "%s" rrÚ z"Command terminated without errors.z: z.Command terminated with an unhandled exceptionz Thread failed) rrrÚ__main__ÚexecÚ__dict__r Úexc_infoÚ tracebackÚprint_tbrÚframeZ DestroyWindow) Zmyoutr&r'r(ZbOKr,ÚtÚvÚtbrrr r%Ks2        r%r,)r r r0rZpywin.frameworkrrrr r#r*r%rZ demoutilsZ NotAScriptrrrr Ús % &