将 show() 与 twill 一起使用会向控制台发送垃圾邮件 HTML

Using show() with twill spams the console with HTML

我一直在使用函数 twill.commands.show() 从页面获取原始 HTML。我 运行 这大约每 5 秒一次。每次函数 运行,它都会用提到的原始网页 HTML 向控制台发送垃圾邮件。我需要使用控制台进行调试,并且由于控制台不断充满HTML,所以这样做是不可能的。由于 show() 被编程为打印 HTML 和 return 它作为一个字符串,我将不得不编辑斜纹,这超出了我的技能范围 way ,并使程序在其他设备上不兼容。尽管反复保存和读取文件可能有效,但每 5 秒执行一次似乎不切实际。

代码:

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

同样,twill 有一个 save_html,可用于保存到文件,但我每 5 秒执行一次,它可能会减慢 program/computer,尤其是当它正在运行 旧 OS.

谢谢!

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 对象。

捕获字符串中的输出并使用正则表达式将所有标签替换为空字符串,以便您可以获得文本。

import re
from StringIO import StringIO

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