Потоки Python печатают в другой буфер, чем основной поток?

Halloween спросил: 07 октября 2018 в 10:17 в: python

У меня есть проект, над которым я работаю, но я изложил проблему в небольшом примере кода ниже. Сначала я создаю сокет, а затем создаю поток для приема соединений (чтобы я мог подключить несколько клиентов). Когда я получаю соединение, я порождаю другой поток, который будет прослушивать это соединение. Я также нахожусь в цикле, который дает мне подсказку, где я могу ввести что-нибудь, и он напечатает это обратно мне.

Проблема заключается в том, что я получаю что-то через сокет. Он выведет на экран. Но когда я пытаюсь что-то набрать в консоли, текст, который находится на моей консоли и поступает из сокета, удаляется. Я хочу, чтобы все из сокета оставалось на экране.

import sys
import socket
from _thread import *def recv_data(conn):
    while True:
        data = conn.recv(256)
        print(data)def accept_clients(sock):
    while True:
        conn, addr = sock.accept()
        print("\nConnected with %s:%s\n" % (addr[0], str(addr[1])))
        start_new_thread(recv_data, (conn,))def start_socket(ip, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print("Socket created")    try:
        port = int(port)
    except ValueError:
        print("Invalid port number.")
        return    try:
        sock.bind((ip, int(port)))
    except socket.error as msg:
        print("Bind failed. Error Code : %s" % (msg))
        return    print("Socket bind complete")
    sock.listen(5)
    print("Socket now listening")    start_new_thread(accept_clients, (sock,))def get_input():
    while True:
        data = input("cmd> ")
        print(data)start_socket('localhost', 5555) 
get_input() 

Здесь можно найти фотографии того, что он делает: https://imgur.com/a/hCWznfE

0 ответов