2015-05-15 3 views
1
def receivedata(self): 
    while True: 
     data = self.soc.recv(1024) 
     if data != "" or data != '' or data != "": 
      sys.stdout.write("Recv>> ") 
      sys.stdout.write(data) 
      sys.stdout.flush() 
      if data == "Server Shutdown": 
       self.soc.close() 
     elif not data: 
      continue 
def senddata(self): 
    while True: 
     try: 
      sys.stdout.write("Send>> ") 
      msg = sys.stdin.readline() 
      self.soc.send(msg) 
     except socket.error: 
      sys.stdout.write("Socket Connection Timed Out") 

Это часть моего клиентского кода python, и я ожидаю от этого, пока он ждет ввода пользователя, он печатает то, что получает от сервера.Python Печать в ожидании ввода

Однако клиент ничего не печатает, когда он ждет ввода пользователя - он печатает только тогда, когда пользователь вводит что-либо.

Есть ли способ изменить это, чтобы он печатался, даже если он ждет ввода пользователя?

+1

возможно дубликат [выход дисплея в то время как внутри сырым \ _INPUT()] (http://stackoverflow.com/questions/22240533/display-output-while-inside -of-сырец-вход) – icedtrees

ответ

1

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

recv_thread = threading.Thread(target=receivedata) 
recv_thread.setDaemon(True) 
recv_thread.start() 
senddata() 

Пара вещей, о коде:

  • Когда встречается socket.error, это может быть что-то другое, кроме таймаута.
  • в какой-то момент вам нужно будет выйти из петли while от senddata (когда пользователь вводит определенный текст? Или) в случае исключения.
  • также добавить обработку исключений в receivedata
  • if заявление в receivedata не в порядке. вы можете заменить его на:

    if data: 
        ...if statements... 
    
Смежные вопросы