Python 中轮询套接字的问题

1 投票
1 回答
2414 浏览
提问于 2025-04-15 14:03

在我开始轮询循环之后,第一次循环后打印的所有消息都需要我在终端按一下回车才能显示出来。

#!/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

1 个回答

1

在第一次循环之后,你是不是已经注册了 pty 文件描述符,然后在轮询它?而且它的文件描述符永远不会和套接字的文件描述符相等,所以你会去读取 pty 文件描述符。这样的话,难道不是在从你的终端读取数据吗?那么,输入回车键是不是会导致它“打印数据”?

撰写回答