Как я могу запретить серверу Python писать в окно терминала? - PullRequest
0 голосов
/ 22 ноября 2018

Мне нужно запустить веб-сервер Python, но при этом принимать входные данные от пользователя, но когда кто-то посещает веб-сайт, информация, занесенная в окно терминала, находится на той же строке, что и входные данные, и выглядит следующим образом: enter image description here

Я пытался установить поток, на котором серверы работают в режиме демона, я пробовал logging.getLogger("socketserver").setLevel(logging.CRITICAL), я пробовал logger.propagation = False и logger.disable = True

Это код моего сервера:

os.chdir("docs")
port = 8980
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", port), Handler) as httpd:
   httpd.serve_forever()

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Подкласс SimpleHTTPRequestHandler и переопределить метод log_message, чтобы ничего не делать:

class QuietHandler(http.server.SimpleHTTPRequestHandler):
    def log_message(self, format, *args):
        pass


with socketserver.TCPServer(("", 8980), QuietHandler) as httpd:
    httpd.serve_forever()
0 голосов
/ 22 ноября 2018

Я не совсем понял, хотите ли вы удалить сообщение регистрации в командной строке или перенаправить запись в файл.

Если вы хотите перенаправить в файл, вы можете использовать os.write для печати в файл.

Если вы хотите отключить регистрацию сообщенийи вы не можете получить их из командной строки, вы можете назначить эту запись в nullHandler .Что-то вроде:

noop = logging.NullHandler()
log.addHandler(noop)
# nothing happens here
log.info('message that will not be logged')

Использование nullHandler - это большое решение, так как в идеале логирование - это обращение к файлу .log для справки, а не отключение или пропуски наверняка.сообщения.

0 голосов
/ 22 ноября 2018

Одна вещь, которую вы можете попробовать, это передать вывод в файл, если размер файла когда-либо станет проблемой, я бы попробовал передать его в nul, например: python3 myserver.py 2> nul

...