我正在使用python 2.7在TCP聊天室中工作,我的服务器应管理多个客户端(我使用了select模块),并为客户端使用了线程,我在打印内容时遇到问题。 由于我在客户端中的raw_input中包含文本,因此当另一个负责打印其他客户端消息的线程被触发时,它很容易变得丑陋。
我的代码结果如下:(在客户端窗口上)
WELCOME TO CHATROOM
you are connected
your pseudo is PSEUDO
other_user joined the chatroom
弹出我的raw_input(),它像这样:
* < your message > * :e chatroom
或者有时我会通过Raw_input文本收到另一个用户的消息
因为它替换了最后打印的行,所以我认为如果它等于我的raw_input文本,可以删除最后打印的行,以在其上打印意外的消息,然后重新打印Raw_input,但我不知道要实现它。 / p>
我曾尝试使用类似“ \ x1b [”的命令移动光标并删除最后打印的行,但这些命令对我不起作用。
class Sender(Thread):
"""would send messages to the server"""
def __init__(self, socket, username):
Thread.__init__(self)
self.socket = socket
self.username = username
def run(self):
while 1:
message = raw_input("* < your message > * :")
self.socket.send(message)
class Receiver(Thread):
import sys
def __init__(self,socket):
Thread.__init__(self)
self.connexion = socket
def run(self) :
while 1:
message_received = self.connexion.recv(4096)
message_received = message_received.decode()
sys.stdout.write("\r" + message_received)
sys.stdout.flush()
if message_recu =='' or message_recu.upper() == "OFF":
break
self._Thread__stop()
print "\nClient arrete. Connexion interrompue."
self.connexion.close()
答案 0 :(得分:0)
要使\b
和\r
正常工作,您需要在打印语句的末尾加一个空格而不是换行符。
EG:
print 'hello there',
语句末尾的,
print
定义它不会前进一行,而是以空格结尾。然后,您可以使用另一个打印语句删除文本。
EG:
print '\r '
将转到行的开头并用空格替换,然后您可以在其上输出文本。