Использование 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))