select() 可以在 Windows 下与 Python 中的文件一起使用吗? [英] Can select() be used with files in Python under Windows?

查看:28
本文介绍了select() 可以在 Windows 下与 Python 中的文件一起使用吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to run the following python server under windows:

"""
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,尝试对非套接字进行操作").这可能与 python 文档中的注释有关,Windows 上的文件对象是不可接受的,但套接字是.在 Windows 上,底层的 select() 函数由 WinSock 库提供,并且不处理不是源自 WinSock 的文件描述符.".在互联网上有很多关于这个主题的帖子,但它们对我来说要么技术性太强,要么就是不清楚.所以我的问题是:有没有什么办法可以在windows下使用python中的select()语句?请添加一个小例子或修改我上面的代码.谢谢!

I get the error message (10038, 'An operation was attempted on something that is not a socket'). This probably relates back to the remark in the python documentation that "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.". On internet there are quite some posts on this topic, but they are either too technical for me or simply not clear. So my question is: is there any way the select() statement in python can be used under windows? Please add a little example or modify my code above. Thanks!

推荐答案

看起来不像 sys.stdin

Look like it does not like sys.stdin

如果你把输入改成这个

input = [server] 

异常会消失.

这是来自文档

 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.

这篇关于select() 可以在 Windows 下与 Python 中的文件一起使用吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆