python 中轮询套接字的问题

发布于 2024-08-03 08:28:04 字数 723 浏览 2 评论 0原文

开始轮询循环后,第一次迭代后打印的所有消息都需要我在终端中按 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

After I begin the polling loop, all messages printed after the first iteration require me to press enter in the terminal for it to be displayed.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏日落 2024-08-10 08:28:04

第一次迭代之后,您还没有注册 pty fd,然后轮询它吗?并且它的 fd 永远不会等于套接字 fd,因此您将 os.read pty fd。这不是现在从你的终端上读取的吗?那么输入 return 不会导致它“打印数据”吗?

After the first iteration, haven't you registered the pty fd, and are then polling it? And its fd will never be equal to the socket fd, so you will then os.read the pty fd. And isn't that now reading from your terminal? And so won't typing a return cause it to "print data"?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文