2015-07-20 3 views
2

Я написал немного IRC-клиента, используя сокеты. И нет, я не хочу использовать библиотеку, подобную скрученной. ;) Я печатаю сообщения на stdout, и это работает хорошо. Есть ли хороший способ печати новых сообщений, а также прослушивание ввода с помощью чего-то вроде потоковой передачи? Вот небольшой отрывок:Python: Threading stdin и stdout одновременно

from threading import Thread 
import time 

def print_stuff(): 
    while True: 
     print "New PRIVMSG!" 
     time.sleep(2) 

t = Thread(target=print_stuff) 
t.start() 

while True: 
    raw_input(">>") 

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

>>New PRIVMSG! 
test test tesNew PRIVMSG! 

Есть ли способ, чтобы сделать эту работу в ЦМД или bash?

Спасибо заранее!

Редактировать: Результат должен выглядеть следующим образом.

New PRIVMSG! 
New PRIVMSG! 
>> hello test 
New PRIVMSG! 
+0

какой вы хотите как мощность? –

+0

Возможно, вы захотите изучить манипулирование курсором в терминале. Таким образом, вы можете имитировать графический интерфейс, сохраняя вход в одном месте и входящие сообщения в другом. Просмотрите https://pypi.python.org/pypi/blessings или https://docs.python.org/2/library/curses.html –

+0

nivix zixer. Похоже, это могло мне помочь! Я посмотрю. Спасибо! – roOt

ответ

2

Вы можете создать консольную блокировку. В потоковом режиме имеется несколько удобных объектов Lock; Я бы создать один, таких как:

consoleLock = threading.Lock() 

тогда, когда вы хотите печатать на консоли:

consoleLock.acquire() 
print 'what to print' 
consoleLock.release() 

Это позволит сделать печать на консоль поточно. Что же касается прослушивания пользовательского ввода в то же время, как именно вы хотите это сделать? Все, что печатается во время ввода, по-прежнему будет находиться в середине области ввода, так как есть только одна консоль для печати (и чтение ввода печатается на консоль).

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