1

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

代码:

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

同样,twill 有一个save_html,可用于保存到文件,但我每 5 秒执行一次,它可能会减慢程序/计算机的速度,尤其是在旧操作系统上运行时。

谢谢!

4

2 回答 2

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

于 2015-04-25T15:01:18.683 回答
1

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

import re
from StringIO import StringIO

sio = StringIO()
twill.set_output(sio)
show()
print(re.sub(r'<.*?>','',sio.getvalue(),flags=re.DOTALL))
于 2015-04-26T17:23:32.347 回答