在windows上,无法使用python 2.7或3.3从select模块访问常量POLLIN

2024-06-26 13:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个脚本可以做到这一点。(请注意,这不是实际的脚本,但为了简单起见,它是包含错误的最简版本)

import select
rmask = select.POLLIN|select.POLLERR|select.POLLHUP <--- ERROR
smask = select.POLLOUT|select.POLLIN|select.POLLERR|select.POLLHUP <--- ERROR
class PollSocket(SelectSocket):
def __init__(self, timer):
    super().__init__(timer)
    self.pollobj = select.poll()
    self.pollobj.register(self.sock, smask)

def poll(self):
    flags = []
    if self.sending:
        self.pollobj.register(self.sock, smask)
        self.sending = False
    else:
        self.pollobj.register(self.sock, rmask)
    try:
        poll = self.pollobj.poll(self.timer.get_timeout())
    except select.error as e:
        print(str(e))
        poll = []
    if poll:
        poll = poll[0][1]
        if poll&select.POLLERR: flags.append('SOCKET_ERR') <--- ERROR
        if poll&select.POLLHUP: flags.append('SOCKET_HUP') <--- ERROR
        if poll&select.POLLIN:  flags.append('SOCKET_RECV') <--- ERROR
        if poll&select.POLLOUT: flags.append('SOCKET_SEND') <--- ERROR
    return flags

def reset(self):
    self.pollobj.unregister(self.sock)
    self.sock.close()
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.setblocking(0)
    self.pollobj.register(self.sock)

我得到了这个错误。在

r掩码=选择.POLLIN|选择.POLLERR|选择.POLLHUP在

AttributeError:“module”对象没有属性“POLLIN”

我尝试过从select导入*来导入select中的所有内容,但也失败了。在

我想知道如何使用Windows系统访问select中的常量。在

如果您需要的话,这里有一个指向selectlib页面的链接。 https://docs.python.org/2/library/select.html

请参阅第16.1.2节


Tags: selfregisteriferrorsocketselectflagssock