Регистраторы тишины и печатающий для экранирования - Python

У меня есть проблема с моим сценарием Python.

Это печатает значительные объемы данных по экрану, и я хотел бы предотвратить все виды печати для экранирования.


Править:

Библиотека, которой я пользуюсь, механизируют, и она печатает МНОГО данных по экрану.

Я установил их на ложь без удачи!

br.set_debug_redirects(False)
br.set_debug_responses(False)
br.set_debug_http(False)

Какие-либо идеи?

Справка была бы удивительна и очень ценилась бы!

8
задан RadiantHex 9 April 2010 в 05:17
поделиться

3 ответа

(Основано на вашей 2-й правке)

Если вы не хотите отключать весь вывод, вы можете попробовать конкретизировать mechanize. http://wwwsearch.sourceforge.net/mechanize/ предоставляет фрагмент, который я изменил (хотя я не уверен, что он будет работать):

import logging
logger = logging.getLogger("mechanize")
# only log really bad events
logger.setLevel(logging.ERROR)

Когда вы что-то печатаете, это идет на экран через файл sys.stdout. Вы можете изменить этот файл на любой другой (например, на файл журнала, который вы открываете), чтобы ничего не печаталось на экране:

import sys
# save the old stdout so you can print later (do sys.stdout = OLD_STDOUT)
OLD_STDOUT = sys.stdout
sys.stdout = open("logfile.txt", 'w')

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

OLD_STDERR = sys.stderr
sys.stderr = open("errorLog.txt", 'w')

Теперь, если по какой-то причине вы хотите полностью игнорировать stdout (или stderr) и никогда больше не видеть его, вы можете определить свои собственные файлоподобные классы, которые просто отбрасывают объекты:

class Discarder(object):
    def write(self, text):
        pass # do nothing
# now discard everything coming out of stdout
sys.stdout = Discarder()

И, чтобы пополнить список возможных решений, вот решение, которое работает в оболочках Unix:

# discards all input (change /dev/null to a file name to keep track of output)
python yourScript.py > /dev/null
11
ответ дан 5 December 2019 в 12:57
поделиться

вы также можете использовать модуль StringIO вместо развертывания собственного потока stdout. Иногда для стандартного вывода требуется больше, чем метод write (еще один распространенный метод - flush ), который будет обрабатывать StringIO.

import StringIO
import sys

sys.stdout = StringIO.StringIO()
0
ответ дан 5 December 2019 в 12:57
поделиться

Вы можете перенаправить sys.stdout и sys.stderr в файл или любой файл, подобный вашему объекту, например

class EatLog(object):
    def write(self):
       pass

sys.stdout = EatLog()

, но я бы не рекомендовал это, более простой вариант - использовать перенаправление на уровне ОС, например

python myscript.py > out.log
2
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: