U if@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 Cs$tjdtttd}|r>tj}tj tj B}||}}ntj }tj }d|}}|tj O}|drp|tj O}|drtj }nd}d} } z\t||tjd||tjtj} t||dtjtj|tj} tj| dd} | d| | fWS| dk rt| | dk rt| YnXdS)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:/opt/alt/python38/lib64/python3.8/asyncio/windows_utils.pyr sb           rc@sbeZdZdZddZddZeddZdd Ze j d d d Z e j fd dZddZddZdS)rzWrapper for an overlapped pipe handle which is vaguely file-object like. The IOCP event loop can use these instead of socket objects. cCs ||_dSN_handleselfhandlerrr__init__VszPipeHandle.__init__cCs2|jdk rd|j}nd}d|jjd|dS)Nzhandle=closed< >)r __class____name__rrrr__repr__Ys zPipeHandle.__repr__cCs|jSrrrrrrr`szPipeHandle.handlecCs|jdkrtd|jS)NzI/O operation on closed pipe)r ValueErrorr%rrrfilenods zPipeHandle.fileno)rcCs|jdk r||jd|_dSrr)rrrrrcloseis  zPipeHandle.closecCs*|jdk r&|d|t|d|dS)Nz unclosed )source)rResourceWarningr()rZ_warnrrr__del__ns zPipeHandle.__del__cCs|Srrr%rrr __enter__sszPipeHandle.__enter__cCs |dSr)r()rtvtbrrr__exit__vszPipeHandle.__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 s|drt|dddks"td}}}d} } } |tkrbtddd\} } t| tj}n|}|tkrtdd\} } t| d}n|}|tkrtdd\} }t|d}n|tkr|}n|}zz t j |f|||d |Wn0| | | fD]}|dk rt |qYn>X| dk r,t| |_| dk r@t| |_| dk rTt| |_W5|tkrlt ||tkrt ||tkrt |XdS) NZuniversal_newlinesrr)FTT)rr)TFr )stdinstdoutstderr)getAssertionErrorrrmsvcrtZopen_osfhandlerO_RDONLYSTDOUTr(superrrrrr7r8r9)rargsr7r8r9kwdsZ stdin_rfdZ stdout_wfdZ stderr_wfdZstdin_whZ stdout_rhZ stderr_rhZstdin_rhZ stdout_whZ stderr_whhr"rrrsR              zPopen.__init__)NNN)r#r1r2r3r __classcell__rrrCrr}sr)r3sysplatform ImportErrorr itertoolsr<r subprocessr r5__all__ZBUFSIZErr>countrrrrrrrrs$ 1,