Печать и ввод одновременно Python многопоточность - PullRequest
0 голосов
/ 22 января 2019

Я хочу создать чат-приложение. У меня есть две темы, одна для ввода пользователя и одна для печати полученных сообщений. Когда сокет получает сообщение, он распечатывает его, но разрушает пользовательский ввод. Я хочу знать, есть ли способ печати пропустить строку ввода.

https://imgur.com/ZlTIIqT

Вы можете увидеть, как он удаляет «>>» при подключении клиента. Я просто хочу печатать и вводить одновременно, не прерывая ввод.

PRINT

def listen_clients(self):
    while True:
        conn, addr = self.sock.accept()
        print(clr("[+] Client connected ({}:{})".format(addr[0], addr[1]), "green"))
        self.clients.append({
            "ip": addr[0],
            "port": addr[1],
            "conn": conn })

ВХОД

def initiate_cli(self):
    while True:
        command = input(" >> ")
        if command == "clients":
            for client in self.clients:
                print("  {0:3}: {1}: {2:5}".format(self.clients.index(client), client["ip"], client["port"]))

1 Ответ

0 голосов
/ 22 января 2019

Я нашел решение с помощью проклятий.Вот код, если кто-то найдет его полезным.

import curses

history = []
def pprint(text):
    global history
    history.insert(0, text)
    if len(history) == int(curses.LINES) - 2:
        history = history[:int(curses.LINES) - 3]
    quote_window.clear()
    for his in history[::-1]:
        quote_window.addstr(his + "\n")
        quote_window.refresh()

stdscr = curses.initscr()

curses.noecho()
curses.cbreak()
stdscr.keypad(True)
curses.curs_set(0)

if curses.has_colors():
    curses.start_color()

curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)

stdscr.addstr("Server", curses.A_REVERSE)
stdscr.chgat(-1, curses.A_REVERSE)

quote_window = curses.newwin(curses.LINES-2, curses.COLS, 1, 0)
input_window = curses.newwin(curses.LINES, curses.COLS, curses.LINES-1, 0)
input_window.bkgd(curses.color_pair(1))
input_window.addstr(">> ")
stdscr.noutrefresh()
quote_window.noutrefresh()
input_window.noutrefresh()

curses.doupdate()

comm = ""
while True:
    key = input_window.getch()
    if key == 10:
        pprint(comm)
        input_window.clear()
        input_window.addstr(">> ")
        comm = ""
    else:
        input_window.addstr(chr(key))
        comm += chr(key)

curses.nocbreak()
curses.echo()
curses.curs_set(1)
curses.endwin()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...