"因为套接字的工作,从键盘非阻塞模式读取,使用Python"

2024-04-23 17:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

Im用python编程一个客户机服务器,他们在工作时每秒发送keepalive包。在

我需要客户端从我的键盘读取一个动作来发送一个特殊的包到服务器,但是当我读的时候我不能停止发送keepalive包,所以如果我用标准的方式读,它会阻止并停止keepalive包的发送。在

完美的行为应该是在保持链接的同时在控制台中写入,当按“enter”时处理该文本。在

有什么想法吗?在

谢谢!在


Tags: 文本服务器客户端标准客户机链接编程方式
3条回答

这基本上是一个线程问题。我建议使用Twisted管理网络连接。它可以异步工作,让你能够拿起按键。在

找到了,用选择。选择我可以这样做:

selectList = [sktTCP,sys.stdin]
(read, write, exc) =  select.select(selectList, [], [], 0 )

我希望它能帮助别人!在

在Unix上读取用户输入而不阻塞(时间过长)的另一种方法是使用警报:

from signal import SIGALRM, alarm, signal

class Alarm(Exception):
    pass

def alarm_handler(*args):
    raise Alarm

def raw_input_alarm(prompt='', timeout=None):
    if timeout is None: # no timeout
        return raw_input(prompt)

    # set signal handler
    signal(SIGALRM, alarm_handler)
    alarm(timeout) # produce SIGALRM in `timeout` seconds
    try:
        return raw_input(prompt)
    except Alarm:
        return '' # timeout happened
    finally:
        alarm(0) # cancel alarm

示例

^{pr2}$

alarm需要整数秒数。如果您想要更小的超时时间,请参见^{}。在

相关问题 更多 >