读取最后打印的行,并使用“ if”语句将其删除

时间:2019-05-26 06:55:47

标签: python python-2.7

我正在使用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()

1 个答案:

答案 0 :(得分:0)

要使\b\r正常工作,您需要在打印语句的末尾加一个空格而不是换行符。

EG: print 'hello there',语句末尾的, print定义它不会前进一行,而是以空格结尾。然后,您可以使用另一个打印语句删除文本。

EG:
print '\r '将转到行的开头并用空格替换,然后您可以在其上输出文本。