Pycurl不断在终端打印
我刚开始学习使用Python和Pycurl来进行网页压力测试。不过,pycurl总是在终端上打印返回的HTML内容,这让压力测试的时间变得更长了。我下面贴出了一段我正在使用的pycurl代码。有没有办法让pycurl运行时不打印或写出结果呢?任何帮助都非常感谢。
p = pycurl.Curl()
p.setopt(pycurl.POST, 0)
p.setopt(pycurl.COOKIE, sessioncookie)
p.setopt(pycurl.URL, 'http://example.com/logoff.php')
p.perform()
p.close()
4 个回答
1
我尝试了这里提到的两种方法,都没有成功,结果都出现了以下错误:
pycurl.error: (23, 'Failed writing body (0 != 108)')
根据文档,lambda x: None
和 devnull.write
应该是不错的选择:
WRITEFUNCTION 回调可以返回写入的字节数。如果这个数字和字节字符串的大小不相等,就表示出错,libcurl 会中止请求。返回 None 是另一种表示回调已经处理完传入字符串的方法,因此表示成功。
http://pycurl.sourceforge.net/doc/callbacks.html#WRITEFUNCTION
不过在我的项目中,我不得不这样做才能解决这个问题:
c.setopt(pycurl.WRITEFUNCTION, lambda bytes: len(bytes))
换句话说,当我查看时,返回写入的字节数并不是可选的。devnull.write
实际上确实返回了写入的字节数,但我没有深入研究这个问题。可能在字节和字符串之间存在一些问题。
请注意,我使用的是 Python 3。我猜这不适用于 Python 2。
3
可以试试这个吗?
devnull = open('/dev/null', 'w')
p.setopt(pycurl.WRITEFUNCTION, devnull.write)
或者就写一个什么都不做的函数。
27
Pycurl的文档真的是糟糕透了,不过我觉得你想要做的是把WRITEFUNCTION设置成一个什么都不做的函数,比如:
p.setopt(pycurl.WRITEFUNCTION, lambda x: None)
另外,我想说一下,我一直以为“SET可以做所有事情”的这种API早就过时了,没想到现在还在用。真让人无奈。