同时打印到控制台和raw_input

时间:2016-03-21 02:36:13

标签: python multithreading raw-input

我有一个client.py和一个server.py.客户端从服务器接收偶尔的消息。客户端也可以向服务器发送消息。

因为raw_input似乎阻止主线程,当客户端从服务器收到消息时,它无法打印到控制台,并且需要raw_input首先完成。

我尝试使用多线程来解决这个问题,但是在下面的代码中,raw_input甚至没有被调用。以下是client.py

import socket
import sys
import threading

BUFFER_SIZE = 1024

def listen_for_server_response(s):
    while 1:
        data = s.recv(BUFFER_SIZE)
        print(data)

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((sys.argv[1], int(sys.argv[2])))
    thread = threading.Thread(target = listen_for_server_response(s))
    thread.start()
    while 1:
        command = raw_input("Command: ")
        s.send(command)

if __name__ == "__main__":
    main()

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

这似乎是糟糕的设计,但你需要使用可调用函数调用线程

thread = threading.Thread(target = listen_for_server_response,args=(s,))
thread.start()

通过调用它就像你在示例中所做的那样,在线程启动之前调用它并且只是永远循环...你甚至不能将它设置为thread.start