Python错误:io.UnsupportedOperation:fileno

时间:2015-06-26 19:32:32

标签: python sockets

我正在使用此链接中的服务器和客户端程序:http://www.bogotobogo.com/python/python_network_programming_tcp_server_client_chat_server_chat_client_select.php

当我运行客户端时,遇到以下错误:

Traceback (most recent call last):
  File "client.py", line 26, in client
    read_sockets, write_sockets, error_sockets =     select.select(socket_list , [], [])
io.UnsupportedOperation: fileno

我正在使用Python 3,但我使用Python 2 to 3的打印更改了所有行。

以下是代码:

while 1:
        socket_list = [sys.stdin, s]
        # Get the list sockets which are readable
        read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])

2 个答案:

答案 0 :(得分:12)

虽然[String:NSObject]方法适用于普通IO对象(fileno()sys.stdoutsys.stderrsys.stdin),但IDLE Python IDE会更改您的IO对象这打破了这个。

所以...如果你收到这个错误,请从直接运行Python命令。

答案 1 :(得分:1)

我最近在Travis CI的测试案例中也遇到了此错误(Python 2:AttributeError:StringIO实例没有属性'fileno'; Python 3:io.UnsupportedOperation:fileno),当python代码执行命令并想要读取sys.stdout

我猜想Travis CI会包装命令输出,并像往常一样返回StringIO而不是文件对象。如您在Travis CI的日志网页中所见,包装的输出是白色,而不是通常的彩色。

所以我的方法不是执行命令,而是运行您自己的类的实例以直接对其进行测试。

我在整个互联网上进行了搜索,但没有找到解决办法。我自己解决了这个问题,并想与他人分享。

如果您仍然不明白我的意思。您可以看到此提交:

https://github.com/martin68/apt-smart/commit/bb8fd766f7d96999a3a3fb79d089cde73c71ce83