o ?Og@sdZddlZejdkredddlZddlZddlZddlZddlZddl Z ddl Z dZ dZ ej Z ejZeZdde d d d ZGd d d ZGdddejZdS)z)Various Windows specific bits and pieces.NZwin32z win32 only)pipePopenPIPE PipeHandlei F)TT)duplex overlappedbufsizec Cstjdtttd}|rtj}tj tj B}||}}n tj }tj }d|}}|tj O}|dr8|tj O}|dr@tj }nd}d} } z.t||tjd||tjtj} t||dtjtj|tj} tj| dd} | d| | fWS| durt| | durt| )zELike os.pipe() but with overlapped support and using handles not fds.z\\.\pipe\python-pipe-{:d}-{:d}-)prefixrNTr)tempfileZmktempformatosgetpidnext _mmap_counter_winapiZPIPE_ACCESS_DUPLEXZ GENERIC_READZ GENERIC_WRITEZPIPE_ACCESS_INBOUNDZFILE_FLAG_FIRST_PIPE_INSTANCEZFILE_FLAG_OVERLAPPEDZCreateNamedPipeZ PIPE_WAITZNMPWAIT_WAIT_FOREVERZNULLZ CreateFileZ OPEN_EXISTINGZConnectNamedPipeZGetOverlappedResult CloseHandle) rrrZaddressZopenmodeaccessZobsizeZibsizeZflags_and_attribsZh1Zh2Zovr)r __class____name__rrrr__repr__Ys zPipeHandle.__repr__cCs|jSrrrrrrr`szPipeHandle.handlecCs|jdur td|jS)NzI/O operation on closed pipe)r ValueErrorr%rrrfilenods zPipeHandle.fileno)rcCs"|jdur||jd|_dSdSrr)rrrrrcloseis   zPipeHandle.closecCs.|jdur|d|t|d|dSdS)Nz unclosed )source)rResourceWarningr()rZ_warnrrr__del__ns  zPipeHandle.__del__cCs|Srrr%rrr __enter__sszPipeHandle.__enter__cCs |dSr)r()rtvtbrrr__exit__vs zPipeHandle.__exit__N)r# __module__ __qualname____doc__rr$propertyrr'rrr(warningswarnr+r,r0rrrrrQs  rcs"eZdZdZdfdd ZZS)rzReplacement for subprocess.Popen using overlapped pipe handles. The stdin, stdout, stderr are None or instances of PipeHandle. Nc sd}}}d} } } |tkr tddd\} } t| tj}n|}|tkr4tdd\} } t| d}n|}|tkrHtdd\} }t|d}n |tkrO|}n|}zaztj|f|||d|Wn| | | fD] }|durvt |qk| durt | |_ | durt | |_ | durt | |_W|tkrt||tkrt||tkrt|dSdS|tkrt||tkrt||tkrt|ww)N)FTT)rr)TFr r)stdinstdoutstderr)rrmsvcrtZopen_osfhandlerO_RDONLYSTDOUTsuperrrrrr7r8r9r()rargsr7r8r9kwdsZ stdin_rfdZ stdout_wfdZ stderr_wfdZstdin_whZ stdout_rhZ stderr_rhZstdin_rhZ stdout_whZ stderr_whhr"rrrsb            zPopen.__init__)NNN)r#r1r2r3r __classcell__rrrArr}sr)r3sysplatform ImportErrorr itertoolsr:r subprocessr r5__all__ZBUFSIZErr<countrrrrrrrrs& 1,