2015-04-01 4 views
1

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

Код:

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

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

Спасибо!

+0

Вы бы так любезны включить какой-то код, который вы пробовали, поэтому у нас есть случай, который мы можем попробовать и воспроизвести? – sircapsalot

+0

@sircapsalot только что сделал –

ответ

2

Twill пишет по умолчанию 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 по вашему вкусу.

+1

Спасибо! (Я использовал последний) –

1

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

import re 
from StringIO import StringIO 

sio = StringIO() 
twill.set_output(sio) 
show() 
print(re.sub(r'<.*?>','',sio.getvalue(),flags=re.DOTALL)) 
+0

Почему нужно заменить метки необходимыми? –

+0

Вы сказали «получить текст», я думал, что вы хотите только текст в html. –

+0

Извините, мой плохой, я имел в виду необработанный HTML-код –