win32 api for Python仅允许我在调用ReadFile()函数后查看新数据。有什么方法可以克服这一点吗?

win32 api for Python仅允许我在调用ReadFile()函数后查看新数据。有什么方法可以克服这一点吗?,python,winapi,Python,Winapi,我的目标是使从套接字读取的消息完全无阻塞,这样,如果消息尚未完全发送或没有新消息,我就可以立即返回None。我创建了一个文件,以便监听如下管道: def __init__(self, name: str) -> None: self.handle = win32file.CreateFile( name, win32file.GENERIC_READ, 0, None, win32file.OPEN_E

我的目标是使从套接字读取的消息完全无阻塞,这样,如果消息尚未完全发送或没有新消息,我就可以立即返回
None
。我创建了一个文件,以便监听如下管道:

def __init__(self, name: str) -> None:
    self.handle = win32file.CreateFile(
        name,
        win32file.GENERIC_READ,
        0,
        None,
        win32file.OPEN_EXISTING,
        0,
        None
        )
该文件接收要读取的第一个字节数,该长度为4个字节,然后是字节本身。为了查看文件中有多少字节,有
win32file.GetFileSize()
,如果我想查看写入了哪些字节,我找到了
win32pipe.PeekNamedPipe()
,它似乎工作正常。但是,这些方法似乎在每条消息之后都会受到文件中某种终止符的影响,这种情况会发生:

#the 4 bytes keeping the length of the message and the message itself have already been written to the file
buffer = win32pipe.PeekNamedPipe(self.handle, 1000)[0]
print(str(buffer)) #only prints 4 bytes

length = struct.unpack('i', self.ReadFile(self.handle, 4))[0] #read 4 bytes and calculate the length

buffer = win32pipe.PeekNamedPipe(self.handle, length)[0]
print(str(buffer)) #prints the whole message


基本上,只有在调用
win32file.ReadFile(self.handle,4)
之后,才会
win32pipe.PeekNamedPipe()
win32file.GetFileSize()
确认文件中的字节数多于这4个字节。这是已知的行为吗?如果是这样的话,有没有什么方法可以让我浏览信息的长度和信息,以便知道信息何时准备好了?虽然我无法访问通过此管道写入的套接字,但我确信它正在发送消息,就像我前面描述的那样(消息大小+消息)。

长度的值是多少?您可以显示完整的代码示例吗?
PeekNamedPipe
将数据从命名或匿名管道复制到缓冲区,而不从管道中删除数据。这不是已知的行为,至少它不能在C++中再现。