Pycurl不断在终端打印

10 投票
4 回答
5768 浏览
提问于 2025-04-17 03:45

我刚开始学习使用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: Nonedevnull.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早就过时了,没想到现在还在用。真让人无奈。

撰写回答