Ошибка Python: io.UsupportedOperation: fileno
Я использую сервер и клиентские программы по этой ссылке: 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 , [], [])
Ответы
Ответ 1
В то время как метод fileno()
работает с обычными объектами IO (sys.stdout
, sys.stderr
, sys.stdin
и socket.socket
), IDLE Python IDE изменяет ваши объекты ввода-вывода, которые нарушают это.
Итак... если вы получите эту ошибку, запустите команду прямо из Python.
Ответ 2
Недавно я получил эту ошибку (Python 2: AttributeError: экземпляр StringIO не имеет атрибута "fileno"; Python 3: io.UnsupportedOperation: fileno) в тестовых случаях на Travis CI, когда код python выполнял команду и хотел прочитать sys. стандартный вывод
Я предполагаю, что на Travis CI оборачивает вывод команды и возвращает StringIO вместо файлового объекта, как обычно. Как вы можете видеть на веб-странице журнала Travis CI, выходной файл имеет белый цвет, а не цветной, как обычно.
Таким образом, мой способ не состоит в том, чтобы извинить команду, а для запуска экземпляра вашего собственного класса для непосредственного тестирования.
Я искал по всему интернету, но не смог получить решение. Я решил это сам и хочу поделиться с другими.
В случае, если вы все еще не понимаете, что я имел в виду. Вы можете увидеть этот коммит:
https://github.com/martin68/apt-smart/commit/bb8fd766f7d96999a3a3fb79d089cde73c71ce83