开始轮询循环后,第一次迭代后打印的所有消息都需要我在终端中按 Enter 键才能显示。
#!/usr/bin/python
import socket, select, os, pty, sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 5007))
s.listen(5)
mypoll = select.poll()
mypoll.register(s.fileno() )
while True:
print "poll time"
subr = mypoll.poll()
for x in subr[0]:
if x == s.fileno():
conn, addr = s.accept()
pid, fd = pty.fork()
if pid != 0:
mypoll.register(fd)
print "done. go back to poll now"
else:
print "forked"
#handles new connection
else:
data = os.read(x,1024)
print data
最佳答案
在第一次迭代之后,您还没有注册 pty fd,然后轮询它吗?并且它的 fd 永远不会等于套接字 fd,因此您将 os.read pty fd。这不是现在从你的终端上读取的吗?那么输入 return 不会导致它“打印数据”吗?
关于python - python 中轮询套接字的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1375772/