我正在使用此链接中的服务器和客户端程序: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 , [], [])
答案 0 :(得分:12)
虽然[String:NSObject]
方法适用于普通IO对象(fileno()
,sys.stdout
,sys.stderr
和sys.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