等待输入时的Python打印

时间:2015-05-15 05:28:22

标签: python multithreading printing client

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客户端代码的一部分,我期望从这里等待用户输入,它打印从服务器接收的内容。

但是,客户端在等待用户输入时不会打印任何内容 - 它只会在用户输入内容时打印。

有没有办法可以改变它,即使在等待用户输入时也会打印出来?

1 个答案:

答案 0 :(得分:1)

如果您的程序需要等待2个单独的事件(用户输入和传入套接字数据),您将不得不使用线程,例如:

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

关于代码的一些事情:

  • 遇到socket.error时,可能不是超时。
  • 您需要退出 senddata while循环(当用户输入某个文本?或者)时会发生异常。
  • 还在 receivedata
  • 中添加异常处理 receivedata 中的
  • if语句不正常。你可以将其替换为:

    if data:
        ...if statements...