Разрешение другим потокам печатать на стандартный вывод при использовании cmdloop из модуля cmd - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь создать приложение, которое использует модуль cmd.Когда я запускаю свою программу, я хочу, чтобы она упала в cmdloop и все еще могла получать распечатки с других вещей.Со временем у меня будут нити, печатающие из сокетов.Но я немного поиграл и не могу что-то напечатать, пока находится в cmdloop.Он просто сидит на подсказке «>».Но я все же хотел бы, чтобы он распечатывал получаемые данные или печатал наши ответы из функции, если я вызываю функцию, которая не входит в этот класс CLI.

import cmd
import string, sys

class CLI(cmd.Cmd):

    def __init__(self):
        cmd.Cmd.__init__(self)
        self.prompt = '> '

    def do_hello1(self, arg):
        print "hello1 again", arg, "!"

    def help_hello1(self):
        print "syntax: hello1 [message]",
        print "-- prints a hello1 message"

    def do_quit(self, arg):
        sys.exit(1)

    def help_quit(self):
        print "syntax: quit",
        print "-- terminates the application"

    # shortcuts
    do_q = do_quit


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = ''   
PORT = 5555


try:
    sock.bind((HOST, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()

print 'Socket bind complete'

sock.listen(10)

conn, addr = sock.accept()

cli = CLI()
cli.cmdloop()

while True:
    data = conn.recv(1024)
    print data
...