gpt4 book ai didi

python - select() 可以在 Windows 下使用 Python 中的文件吗?

转载 作者:太空狗 更新时间:2023-10-29 20:16:04 27 4
gpt4 key购买 nike

我正在尝试在 Windows 下运行以下 python 服务器:

"""
An echo server that uses select to handle multiple clients at a time.
Entering any line of input at the terminal will exit the server.
"""

import select
import socket
import sys

host = ''
port = 50000
backlog = 5
size = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host,port))
server.listen(backlog)
input = [server,sys.stdin]
running = 1
while running:
inputready,outputready,exceptready = select.select(input,[],[])

for s in inputready:

if s == server:
# handle the server socket
client, address = server.accept()
input.append(client)

elif s == sys.stdin:
# handle standard input
junk = sys.stdin.readline()
running = 0

else:
# handle all other sockets
data = s.recv(size)
if data:
s.send(data)
else:
s.close()
input.remove(s)
server.close()

我收到错误消息(10038,“尝试对不是套接字的对象进行操作”)。这可能与 the remark 有关在 python 文档中,“Windows 上的文件对象是 Not Acceptable ,但套接字是可接受的。在 Windows 上,底层 select() 函数由 WinSock 库提供,并且不处理不是源自 WinSock 的文件描述符。”。互联网上有很多关于这个主题的帖子,但它们要么对我来说太技术化,要么根本不清楚。所以我的问题是:有什么办法可以在windows下使用python中的select()语句吗?请添加一个小例子或修改我上面的代码。谢谢!

最佳答案

看起来不像sys.stdin

如果你改变这个输入

input = [server] 

异常将消失。

这是来自 the doc

 Note:
File objects on Windows are not acceptable, but sockets are. On Windows, the
underlying select() function is provided by the WinSock library, and does not
handle file descriptors that don’t originate from WinSock.

关于python - select() 可以在 Windows 下使用 Python 中的文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10842428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com