У меня есть проблема с моим сценарием Python.
Это печатает значительные объемы данных по экрану, и я хотел бы предотвратить все виды печати для экранирования.
Править:
Библиотека, которой я пользуюсь, механизируют, и она печатает МНОГО данных по экрану.
Я установил их на ложь без удачи!
br.set_debug_redirects(False)
br.set_debug_responses(False)
br.set_debug_http(False)
Какие-либо идеи?
Справка была бы удивительна и очень ценилась бы!
(Основано на вашей 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
вы также можете использовать модуль StringIO
вместо развертывания собственного потока stdout. Иногда для стандартного вывода требуется больше, чем метод write
(еще один распространенный метод - flush
), который будет обрабатывать StringIO.
import StringIO
import sys
sys.stdout = StringIO.StringIO()
Вы можете перенаправить sys.stdout и sys.stderr в файл или любой файл, подобный вашему объекту, например
class EatLog(object):
def write(self):
pass
sys.stdout = EatLog()
, но я бы не рекомендовал это, более простой вариант - использовать перенаправление на уровне ОС, например
python myscript.py > out.log