select 在一个非套接字上尝试了一个操作。

#!/usr/bin/env python3

-*- coding: utf-8 -*-

import socket,sys
from time import ctime
import select
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',9999))
print('try to connect...')
Myset1=[s,sys.stdout]
he=[]
be=[]
info=''
while info!='exit':
readyMyset, readyOutput, readyException = select.select(Myset1, he, be)
for indata in readyMyset:
if indata == readyMyset:
try:
info = s.recv(2048).decode('utf-8')
except socket.error as e:
print('recv make error:%s' % e)
sys.exit(1)
print('[%s] %s' % (ctime(), info))
else:
info = input()
try:
s.sendall(info.encode('utf-8'))
except socket.error as e:
print('send make error:%s' % e)
sys.exit(1)
s.close()

报错信息
Traceback (most recent call last):
File "D:/pycharm/one/pytesttwo.py", line 14, in
readyMyset, readyOutput, readyException = select.select(Myset1, he, be)
OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。

这是什么原因

看上去可能是你的服务器端没有开启,如果是linux, 可以用nc -l 9999 进行测试

 #!/usr/bin/env python3
#-*- coding: utf-8 -*-
import socket,sys
from time import ctime
import select
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
    print('try to connect...')
    s.connect(('127.0.0.1',9999))
    Myset1=[s,sys.stdout]
    he=[]
    be=[]
    info=''
    while info!='exit':
        readyMyset, readyOutput, readyException = select.select(Myset1, he, be)
        for indata in readyMyset:
            if indata == readyMyset:
                try:
                    info = s.recv(2048).decode('utf-8')
                except socket.error as e:
                    print('recv make error:%s' % e)
                    sys.exit(1)
                print('[%s] %s' % (ctime(), info))
            else:
                info = input()
                try:
                    s.sendall(info.encode('utf-8'))
                except socket.error as e:
                    print('send make error:%s' % e)
                    sys.exit(1)
except Exception as e: 
    print("something's wrong with socket connection. Exception is %s" %  e)
finally:
    s.close()