Python模块";斜纹布--变量赋值期间的HTML洪水

Python模块";斜纹布--变量赋值期间的HTML洪水,python,variable-assignment,twill,Python,Variable Assignment,Twill,我正在使用Python中的Twill模块制作一个简单的命令行程序,用于从网站收集和解析信息(非常通用)。我想使用Twill的show()命令将HTML输出分配给变量,通过解析命令运行页面,但每次我将其分配给变量时 htmlString = twill.commands.show() 我在命令行上获得了大量的HTML(而且是空闲的)。为什么会这样?我不是要求打印变量,它附近没有打印命令。我只想分配给你做进一步的操作。为什么变量赋值会导致打印?这不是致命的错误或其他什么,只是非常非常不方便。我使用

我正在使用Python中的Twill模块制作一个简单的命令行程序,用于从网站收集和解析信息(非常通用)。我想使用Twill的show()命令将HTML输出分配给变量,通过解析命令运行页面,但每次我将其分配给变量时

htmlString = twill.commands.show()

我在命令行上获得了大量的HTML(而且是空闲的)。为什么会这样?我不是要求打印变量,它附近没有打印命令。我只想分配给你做进一步的操作。为什么变量赋值会导致打印?这不是致命的错误或其他什么,只是非常非常不方便。我使用的是Python2.6、Twill 0.9和Ubuntu,如果这与什么有关的话。

我建议使用
lxml
beautifulsou
解析HTML,决不使用
Twill
。但是我看到你在调用
.show()
方法,也许这个方法里面有
print
语句。

Twill是一个奇怪的方法,它会向终端打印很多输出。导致打印内容的不是变量赋值,而是
show()
方法。它将打印(而不是返回)输出。

是的,我确信show()确实内置了打印命令。我猜这会导致它打印到shell中,即使在变量赋值期间也是如此。除了修改斜纹布本身之外,还有什么办法可以抑制印花吗?顺便谢谢你的帮助!真不敢相信我得到了答案,更不用说这么快了!您可以通过将任何启用写入的文件句柄传递给twill.set_输出来捕获命令输出,例如
twill.set_输出(StringIO())
将所有非错误输出发送到StringIO()对象。明白了!再次感谢。如果其他人必须处理这个问题……我发现Twill中还有一个“浏览器”子模块,show()就是从这个模块派生出来的,它是Twill包装中的另一层,提供了稍微低一点的函数(它们在网站上没有记录)。