U e5dÄ ã @ s¨ d Z ddlZejdkredƒ‚ddlZddlZddlZddlZddlZddl Z ddl Z dZdZej Z ejZe ¡ Zdded œd d„ZG dd „ d ƒZG dd„ dejƒZdS )z)Various Windows specific bits and pieces.é NZwin32z win32 only)ÚpipeÚPopenÚPIPEÚ PipeHandlei F)TT)ÚduplexÚ overlappedÚbufsizec C s$ t jd t ¡ ttƒ¡d�}| r>tj}tj tj B }|| }}ntj}tj }d| }}|tjO }|d rp|tj O }|d r€tj }nd}d } } z\t ||tjd||tjtj¡} t ||dtjtj|tj¡} tj| dd�}| d¡ | | fW S | dk �rt | ¡ | dk �rt | ¡ ‚ Y nX dS )zELike os.pipe() but with overlapped support and using handles not fds.z\\.\pipe\python-pipe-{:d}-{:d}-)Úprefixr é NT©r )ÚtempfileZmktempÚformatÚosÚgetpidÚnextÚ _mmap_counterÚ_winapiZPIPE_ACCESS_DUPLEXZGENERIC_READZ GENERIC_WRITEZPIPE_ACCESS_INBOUNDZFILE_FLAG_FIRST_PIPE_INSTANCEZFILE_FLAG_OVERLAPPEDZCreateNamedPipeZ PIPE_WAITZNMPWAIT_WAIT_FOREVERZNULLZ CreateFileZ OPEN_EXISTINGZConnectNamedPipeZGetOverlappedResultÚCloseHandle)r r r ZaddressZopenmodeÚaccessZobsizeZibsizeZflags_and_attribsZh1Zh2Zov© r ú-/usr/lib64/python3.8/asyncio/windows_utils.pyr sb ÿÿ þ þ r c @ sb e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd „ Ze j d œdd„Zej fd d„Zdd„ Zdd„ ZdS )r z�Wrapper for an overlapped pipe handle which is vaguely file-object like. The IOCP event loop can use these instead of socket objects. c C s || _ d S ©N©Ú_handle©ÚselfÚhandler r r Ú__init__V s zPipeHandle.__init__c C s2 | j d k rd| j ›�}nd}d| jj› d|› d�S )Nzhandle=Úclosedú<ú ú>)r Ú __class__Ú__name__r r r r Ú__repr__Y s zPipeHandle.__repr__c C s | j S r r ©r r r r r ` s zPipeHandle.handlec C s | j d krtdƒ‚| j S )NzI/O operation on closed pipe)r Ú ValueErrorr% r r r Úfilenod s zPipeHandle.fileno)r c C s | j d k r|| j ƒ d | _ d S r r )r r r r r Úclosei s zPipeHandle.closec C s* | j d k r&|d| ›�t| d� | ¡ d S )Nz unclosed )Úsource)r ÚResourceWarningr( )r Z_warnr r r Ú__del__n s zPipeHandle.__del__c C s | S r r r% r r r Ú __enter__s s zPipeHandle.__enter__c C s | ¡ d S r )r( )r ÚtÚvÚtbr r r Ú__exit__v s zPipeHandle.__exit__N)r# Ú __module__Ú__qualname__Ú__doc__r r$ Úpropertyr r' r r r( ÚwarningsÚwarnr+ r, r0 r r r r r Q s r c s" e Zd ZdZd‡ fdd„ Z‡ ZS )r zˆReplacement for subprocess.Popen using overlapped pipe handles. The stdin, stdout, stderr are None or instances of PipeHandle. Nc sš | d¡rt‚| dd¡dks"t‚d } }}d } } }|tkrbtddd�\}} t |tj¡}n|}|tkrŠtdd�\} } t | d¡}n|}|tkr²tdd�\}}t |d¡}n|tkrÀ|}n|}z’z t ƒ j|f|||d œ|—Ž W n0 | | |fD ]}|d k røt |¡ qø‚ Y n>X | d k �r,t| ƒ| _| d k �r@t| ƒ| _|d k �rTt|ƒ| _W 5 |tk�rlt |¡ |tk�r€t |¡ |tk�r”t |¡ X d S ) NZuniversal_newlinesr r )FTT)r r )TFr )ÚstdinÚstdoutÚstderr)ÚgetÚAssertionErrorr r ÚmsvcrtZopen_osfhandler ÚO_RDONLYÚSTDOUTr( Úsuperr r r r r7 r8 r9 )r Úargsr7 r8 r9 ÚkwdsZ stdin_rfdZ stdout_wfdZ stderr_wfdZstdin_whZ stdout_rhZ stderr_rhZstdin_rhZ stdout_whZ stderr_whÚh©r" r r r ‚ sR ÿÿ zPopen.__init__)NNN)r# r1 r2 r3 r Ú __classcell__r r rC r r } s r )r3 ÚsysÚplatformÚImportErrorr Ú itertoolsr<