2013-03-09 109 views
0

在python socket编程中,例如聊天,主要目标是不断接收他人的消息,当接收到他按下任何按键时,程序应该接受输入并发送该消息而不是打印接收到的消息。发送完成后,应打印收到的消息。如何在不明确要求用户键入消息的情况下执行此操作?键盘中断 - PYTHON

谢谢。

回答

1

如果我正确理解你的问题,你会想要使用某种形式的事件系统。将输入文本和接收消息视为事件。

http://en.wikipedia.org/wiki/Event_(computing)

Event system in Python

因为这样的事情是一个实时的程序,你的程序会在一个循环中运行。在整个循环中,事件被放到一个队列中,并且在每个循环的开始,它们按照它们被触发的顺序处理。

既然你正在使用网络,也许一些线程是有用的。由于全局解释器锁定,Python不能真正使用多线程来提高性能,但它对于在后面进行I/O操作仍然有用。这样,当您的聊天客户端(使用您的示例)尝试获取其他人发送的消息时,程序的其余部分不会冻结。这对缓慢的互联网连接尤其有利。

+0

感谢您的回复,是否有任何内置函数来检查键是否被按下? – kanchan 2013-03-09 21:03:33

+0

但我不知道如何听其他东西的同时听键盘?我有一些python多线程的经验。你能否详细说明如何听键盘? – kanchan 2013-03-09 21:18:39

+0

这取决于你想要去的图书馆。我很喜欢Pygame的事件系统。 http://pygame.org/docs/ref/event.html每次您对事件进行轮询时,您都可以查看它们中的任何一个是否属于“pygame.KEYDOWN”类型,如果这样做,那么您可以获得键与'the_event_object.key'。用'pygame.Event()'制作你自己的事件,并通过将它们传递给'pygame.event.post'来触发它们。事件本身通常不具有方法,相反,您应该制作一些注意某些类型事件(称为侦听器)存在的内容,然后在必要时对其执行操作。 – JesseTG 2013-03-09 21:29:50