Использование show() с твилами спамит консоль с HTML

Я использовал Fuction twill.commands.show() чтобы получить сырой HTML со страницы. Я запускаю это примерно каждые 5 секунд. Каждый раз, когда функция запускается, она спамит консоль упомянутыми веб-страницами необработанным HTML. Мне нужно использовать консоль для отладки, и, поскольку консоль постоянно заполнена HTML, это невозможно. поскольку show() Я запрограммирован на печать HTML-кода и возвращаю его в виде строки. Мне придется редактировать саржу, что выходит за рамки моих навыков и делает программу несовместимой на других устройствах. Несмотря на то, что сохранение и чтение файла снова и снова может работать, кажется, что это нецелесообразно делать каждые 5 секунд.

Код:

go('http://google.com/')
html=show()

Опять же, саржа имеет save_html, который может быть использован для сохранения в файл, но я делаю это каждые 5 секунд, и это может замедлить работу программы / компьютера, особенно если он запускается на более старой ОС.

Спасибо!

2 ответа

Решение

Твилл пишет stdout по умолчанию.

Ты можешь использовать twill.set_output(fp) для перенаправления его стандартного вывода. Есть несколько возможных реализаций для этого:

Написать в StringIO:

from StringIO import StringIO
sio = StringIO()
twill.set_output(sio)
html = show() # html+'\n' == sio.getvalue()

или /dev/null:

import os
null = open(os.devnull, 'w')
twill.set_output(null)
html = show() # writing to /dev/null or nul
null.close()

или вообще ничего

class DevNull(object):
    def write(self, str):
        pass
twill.set_output(DevNull())
html = show()

или к любому другому доступному для записи файлообменному объекту python по вашему вкусу.

Записать вывод в строку и заменить все теги на пустую строку с помощью регулярных выражений, чтобы вы могли получить текст.

import re
from StringIO import StringIO

sio = StringIO()
twill.set_output(sio)
show()
print(re.sub(r'<.*?>','',sio.getvalue(),flags=re.DOTALL))
Другие вопросы по тегам