B
H8͋ @ 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 } }
yZt||tjd||tjtj} t||dtjtj|tj}
tj| dd}|d | |
fS | 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 )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/python37/lib64/python3.7/asyncio/windows_utils.pyr sB
r c @ s\ e Zd ZdZdd Zdd Zedd Zdd Ze j
d
ddZd
d Zdd Z
dd 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)_handle)selfhandler 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 r __repr__Y s
zPipeHandle.__repr__c C s | j S )N)r )r r r r r ` s zPipeHandle.handlec C s | j d krtd| j S )NzI/O operation on closed pipe)r
ValueError)r r r r filenod s
zPipeHandle.fileno)r c C s | j d k r|| j d | _ d S )N)r )r r r r r closei s
zPipeHandle.closec C s, | j d k r(tjd| t| d | d S )Nz unclosed )source)r warningswarnResourceWarningr# )r r r r __del__n s
zPipeHandle.__del__c C s | S )Nr )r r r r __enter__t s zPipeHandle.__enter__c C s | d S )N)r# )r tvtbr r r __exit__w s zPipeHandle.__exit__N)r
__module____qualname____doc__r r propertyr r" r r r# r( r) r- 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 s| d } }}d } }
}|t kr@tddd\}} t|tj}n|}|t krhtdd\}
}
t|
d}n|}|t krtdd\}}t|d}n|tkr|}n|}zy t j|f|||d| W n4 x$| |
|fD ]}|d k rt
| qW Y n>X | d k rt| | _|
d k r"t|
| _
|d k r6t|| _W d |t krNt| |t krbt| |t krvt| X d S )N)FTT)r r )TF)r r )stdinstdoutstderr)r r msvcrtZopen_osfhandler
O_RDONLYSTDOUTsuperr r r r r2 r3 r4 r# )r argsr2 r3 r4 kwdsZ stdin_rfdZ
stdout_wfdZ
stderr_wfdZstdin_whZ stdout_rhZ stderr_rhZstdin_rhZ stdout_whZ stderr_whh)r r r r sH
zPopen.__init__)NNN)r r. r/ r0 r
__classcell__r r )r r r ~ s r )r0 sysplatformImportErrorr itertoolsr5 r
subprocessr r% __all__ZBUFSIZEr r7 countr r r r r r r r