10

我是使用 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

4 回答 4

27

Pycurl 文档很糟糕,但我认为您想将 WRITEFUNCTION 设置为不执行任何操作的函数,例如

p.setopt(pycurl.WRITEFUNCTION, lambda x: None)

另外,我想声明一下,我认为“SET 做所有事情”的 API 与 VMS 一起出现了。啊啊。

于 2011-10-05T21:52:23.993 回答
3

可以试试这个吗?

devnull = open('/dev/null', 'w')
p.setopt(pycurl.WRITEFUNCTION, devnull.write)

或者只是一个什么都不做的函数。

于 2011-10-05T21:53:55.980 回答
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。

于 2015-12-29T15:40:28.147 回答
0

要隐藏输出,请将 VERBOSE 更改为 0:

p.setopt(pycurl.VERBOSE, 0)
于 2016-10-23T06:41:59.843 回答