微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可以选择()与Windows下的Python文件一起使用吗?

我试图在 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,’尝试对非套接字的操作’).这可能与python文档中的the remark有关,“Windows上的文件对象是不可接受的,但套接字是.在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.

原文地址:https://www.jb51.cc/windows/365340.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐