控制台中的输入文本通过程序的输出分为多行

时间:2018-08-23 20:36:30

标签: python console output

我目前正在使用Python聊天应用程序,但目前面临一个令人讨厌的问题。 当用户向控制台输入消息时,另一个用户正在发送消息时,第一个用户的输入消息将分成多行。我附上了问题的图片。

如您所见,输入被控制台的输出拦截。

任何想法如何防止这种情况?

对于输入,我在朋友向通道发送消息时按住Z键。如您所见,它被出现的消息打断了。

编辑:

import colorama
from termcolor import cprint
colorama.init()

green = '\33[92m'
reset    = '\033[0m'

def receive_messages():
    while True:
        data = s.recv(1024).decode()
        #s is a previously defined socket
        ind = data.index(">") + 1
        usr = data[:ind]
        raw = data[ind:]
        cprint(green + usr + green + reset + raw + reset)

threading.Thread(target = receive_messages).start()

username = #opens the file where the username is stored: <username>

while True:
    txt = input()
    s.send((username + " " + txt).encode())

我想要的是将输入文本锁定在一行中,而不是分成多行。

1 个答案:

答案 0 :(得分:1)

为了自己处理这个问题,您需要逐个字符地跟踪用户输入。收到消息后,在打印之前,请清除用户输入,打印收到的消息,然后重新打印部分输入的消息。这样可以使消息不间断。

为简单起见,更好的主意是使用py-termnpyscreen之类的东西(尽管我不确定这些库是否特别具有您需要的所有功能)来管理输出到应该这样做的终端,以便您可以更轻松地管理在终端窗口中打印消息的位置和用户消息输入的位置。