U if @ s d Z ddlZejdkredddlZddlZddlZddlZddlZddl Z ddl Z dZdZej Z ejZe Zdded d dZG dd d ZG dd dejZdS )z)Various Windows specific bits and pieces. NZwin32z win32 only)pipePopenPIPE PipeHandlei F)TT)duplex overlappedbufsizec C s$ t jdt ttd}| r>tj}tj tj B }|| }}ntj}tj }d| }}|tjO }|d rp|tj O }|d rtj }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 NTr )tempfileZmktempformatosgetpidnext _mmap_counter_winapiZPIPE_ACCESS_DUPLEXZGENERIC_READZ GENERIC_WRITEZPIPE_ACCESS_INBOUNDZFILE_FLAG_FIRST_PIPE_INSTANCEZFILE_FLAG_OVERLAPPEDZCreateNamedPipeZ PIPE_WAITZNMPWAIT_WAIT_FOREVERZNULLZ CreateFileZ OPEN_EXISTINGZConnectNamedPipeZGetOverlappedResultCloseHandle)r r r ZaddressZopenmodeaccessZobsizeZibsizeZflags_and_attribsZh1Zh2Zov r :/opt/alt/python38/lib64/python3.8/asyncio/windows_utils.pyr sb r c @ sb e Zd ZdZdd Zdd Zedd Zdd Ze j d ddZej fd dZdd Zdd ZdS )r zWrapper 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_handleselfhandler r r __init__V s zPipeHandle.__init__c C s2 | j d k rd| j }nd}d| jj d| dS )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 tvtbr r r __exit__v s zPipeHandle.__exit__N)r# __module____qualname____doc__r r$ propertyr r' r r r( warningswarnr+ r, r0 r r r r r Q s r c s" e Zd ZdZd fdd Z ZS )r zReplacement for subprocess.Popen using overlapped pipe handles. The stdin, stdout, stderr are None or instances of PipeHandle. Nc sx d } }}d } } }|t kr@tddd\}} t|tj}n|}|t krhtdd\} } t| d}n|}|t krtdd\}}t|d}n|tkr|}n|}zz t j |f|||d| W n0 | | |fD ]}|d k rt | qւ Y n>X | d k r t| | _ | d k rt| | _|d k r2t|| _W 5 |t krJt| |t kr^t| |t krrt| X d S )N)FTT)r r )TFr r )stdinstdoutstderr)r r msvcrtZopen_osfhandler O_RDONLYSTDOUTr( 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_whhr" r r r sN zPopen.__init__)NNN)r# r1 r2 r3 r __classcell__r r rA r r } s r )r3 sysplatformImportErrorr itertoolsr: r subprocessr r5 __all__ZBUFSIZEr r<