在Windows中使用Python-“sys.stdin”错误

在Windows中使用Python-“sys.stdin”错误,python,windows,python-2.7,sockets,cmd,Python,Windows,Python 2.7,Sockets,Cmd,为了让聊天系统在使用Windows的Python中工作,我在客户端使用了以下代码: chat_client.py 但是,我在尝试连接到同样使用Python运行的服务器时遇到以下错误: select.error:10038,'尝试对以下内容执行操作: 不是插座 这与sys.stdin有关 我认为这是Windows上的文件对象不可接受的问题,但套接字是可以接受的。在Windows上,基础select函数由WinSock库提供,不处理非源于WinSock的文件描述符 是否有一种解决方法可以在Windo

为了让聊天系统在使用Windows的Python中工作,我在客户端使用了以下代码:

chat_client.py 但是,我在尝试连接到同样使用Python运行的服务器时遇到以下错误:

select.error:10038,'尝试对以下内容执行操作: 不是插座

这与sys.stdin有关

我认为这是Windows上的文件对象不可接受的问题,但套接字是可以接受的。在Windows上,基础select函数由WinSock库提供,不处理非源于WinSock的文件描述符

是否有一种解决方法可以在Windows上实现chat_client.py代码

是否有一种解决方法来实现 Windows上的chat_client.py代码

您可以通过定期检查输入活动来管理,例如。G通过将select语句替换为

        # Get the list sockets which are readable, time-out after 1 s
        read_sockets = select.select([s], [], [], 1)[0]
        import msvcrt
        if msvcrt.kbhit(): read_sockets.append(sys.stdin)
注意,在这个示例方法中,当一个人开始键入一行时,传入的消息只会在输入行完成后显示

是否有一种解决方法来实现 Windows上的chat_client.py代码

您可以通过定期检查输入活动来管理,例如。G通过将select语句替换为

        # Get the list sockets which are readable, time-out after 1 s
        read_sockets = select.select([s], [], [], 1)[0]
        import msvcrt
        if msvcrt.kbhit(): read_sockets.append(sys.stdin)

请注意,在这个示例方法中,当一个人开始键入一行时,传入的消息只有在输入行完成后才会显示。

…不要尝试将stdin当作套接字来使用?不确定您在这里期望的答案是什么。有很多方法可以实现“不要这样做”方法。一种是多线程-如果你有一个单独的线程从stdin读取,它可以做一件简单的事情,并使用阻塞读取调用,而你的网络代码使用select和recv,后者同样是一个套接字调用,预计不会与stdin一起工作。许多现有问题与此重叠。请参阅示例,并感谢您的评论。我试图按照这个指南来制作聊天应用程序:我以前使用过多线程,我已经看过你列出的问题,但是我无法得到一个确定的解决方案……不要试图像使用套接字一样使用stdin?不确定您在这里期望的答案是什么。有很多方法可以实现“不要这样做”方法。一种是多线程-如果你有一个单独的线程从stdin读取,它可以做一件简单的事情,并使用阻塞读取调用,而你的网络代码使用select和recv,后者同样是一个套接字调用,预计不会与stdin一起工作。许多现有问题与此重叠。请参阅示例,并感谢您的评论。我试图按照这个指南来制作聊天应用程序:我以前使用过多线程,我已经看过你列出的问题,但是我无法得到一个明确的解决方案。