2013-07-25 3 views
3

У меня есть базовый клиент и сервер чата командной строки на Python, но это применимо, возможно, к любому языку. Я столкнулся с очень очевидной проблемой, и я не уверен, будет ли вокруг нее какой-нибудь способ (кроме использования графического интерфейса, который быстро решает проблему). Когда сервер отправляет клиенту сообщение, в результате чего клиент отправит сообщение print(), оно будет вставлено в том же месте, где человек будет вводить собственное сообщение, в результате чего он будет разделен входящим сообщением. Например (записываются в виде # комментария, чтобы избежать странной подсветки синтаксиса):Если возможно, как можно остановить печать на stdout от прерывания того, что было напечатано?

# Client1: Knock-knock! 
# Client2: Who's there? 
# Client1: Interrupting cow! 
# Client2: Inter 
# Client1: MOOOOOOO 
# Client2: rupting cow who? 

Где Client2 не попало ввести так набрав Who's there?.

Таким образом, очевидно, что в GUI есть всевозможные обходные пути, такие как панели, но мне любопытно узнать, есть ли способ реализовать это строго в командной строке native/command. Я не мог найти ничего такого, как во время моего поиска в Интернете, для решения! Благодаря!

+0

(пение) GUI! GUI! GUI! Серьезно, хотя, что именно вы хотите? Вы хотите, чтобы сообщение Client1 было напечатано * только после того, как возвращаются образы Client2? Или вы хотите, чтобы сообщение Client1 было префиксом '\ n', так что оно оставляет пробелы для Client2, чтобы завершить ввод? (Но в этом случае, что, если Client2 создает несколько строк?) – tehsockz

+0

GUI GUI. Меня больше интересует, возможно ли это! Это чат-клиент, он должен обновляться в реальном времени, невероятно сложно провести разговор, когда вам нужно набрать сообщение, чтобы увидеть ответ на сообщение, напечатанное ранее! Поэтому я бы хотел, чтобы он печатал сообщение Client1 и перемещал то, что Client2 вводил под новопринятым сообщением, чтобы они могли печатать, как ничто никогда не происходило. – Andrew

ответ

2

Я бы использовал что-то вроде https://pypi.python.org/pypi/blessings/, которое позволяет вам установить терминал с помощью курсора.

Вы можете переместить курсор вверх, когда хотите распечатать вывод из другого соединения, а затем переместить его назад, когда вы хотите получить вход.

Если вы хотите получить с ума вы можете делать все, что магия самостоятельно с помощью команд терминала управления (на окнах вы будете нуждаться в Colorama), который позволит вам делать такие вещи, как:

print("\033[6;3HHello") 

который движется курсор на x, y. Для этого требуется терминал ansi.

+0

Вау! Это действительно аккуратный материал, там есть множество возможностей! Спасибо за это. – Andrew

Смежные вопросы