Чтобы предотвратить печать функции в пакетной консоли в Python - PullRequest
20 голосов
/ 09 декабря 2011

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

Большое спасибо!

Нико

Ответы [ 5 ]

27 голосов
/ 09 декабря 2011

Да, вы можете перенаправить sys.stdout:

import sys
import os

sys.stdout = open(os.devnull, "w")

my_nasty_function()

sys.stdout = sys.__stdout__

Просто замените my_nasty_function вашей действительной функцией.

РЕДАКТИРОВАТЬ: Теперь должно работать на окнахaswell и использует sys.__stdout__ вместо резервной переменной.

8 голосов
/ 09 декабря 2011

ответ Константина ответ в порядке, однако фактически нет необходимости открывать нулевое устройство. И кстати, если вы хотите портативное нулевое устройство, есть os.devnull.

На самом деле все, что вам нужно, это класс, который будет игнорировать все, что вы ему пишете. Так что более портативная версия будет:

class NullIO(StringIO):
    def write(self, txt):
       pass

sys.stdout = NullIO()

my_nasty_function()

sys.stdout = sys.__stdout__

.

1 голос
/ 10 декабря 2011

Вы можете использовать модифицированную версию этого ответа , чтобы создать «нулевой» выходной контекст для переноса вызова функции.

Это можно сделать, просто передав os.devnull в качестве аргумента new_stdout функции менеджера контекста stdout_redirected(), когда она используется.

1 голос
/ 09 декабря 2011

Решение Константиния будет работать на * nix, но это должно работать на любой платформе:

import sys
import tempfile

sys.stdout = tempfile.TemporaryFile()

# Do crazy stuff here

sys.stdout.close()
#now the temp file is gone
sys.stdout = sys.__stdout__
0 голосов
/ 09 января 2018

Еще одно открытие - обернуть вашу функцию в декоратор.

import sys
from io import stringIO 

class NullIO(StringIO):
    def write(self, txt):
        pass


def silent(fn):
    """Decorator to silence functions."""
    def silent_fn(*args, **kwargs):
        saved_stdout = sys.stdout
        sys.stdout = NullIO()
        result = fn(*args, **kwargs)
        sys.stdout = saved_stdout
        return result
    return silent_fn


def nasty():
    """Uselful function with nasty prints."""
    print('a lot of annyoing output')
    return 42


# Wrap in decorator to prevent printing.
silent_nasty = silent(nasty)
# Same output, but prints only once.
nasty(), silent_nasty()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...