使用带斜线的show()将控制台与HTML一起使用

时间:2015-04-01 15:40:32

标签: python twill

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

代码:

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

再次,斜纹有一个save_html,可用于保存到文件,但我每隔5秒就会这样做,这可能会使程序/计算机变慢,特别是如果它'在较旧的操作系统上运行。

谢谢!

2 个答案:

答案 0 :(得分: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对象。

答案 1 :(得分:1)

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

import re
from StringIO import StringIO

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