【问题标题】:Pycurl keeps printing in terminalPycurl 一直在终端打印
【发布时间】:2011-12-01 20:38:47
【问题描述】:

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

【问题讨论】:

    标签: python pycurl


    【解决方案1】:

    Pycurl 文档很糟糕,但我认为您想将 WRITEFUNCTION 设置为什么都不做的函数,例如

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

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

    【讨论】:

    • The Pycurl documentation is terrible - 如此真实
    【解决方案2】:

    可以试试这个吗?

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

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

    【讨论】:

      【解决方案3】:

      我对这里列出的两种方法都没有运气。两者都导致以下错误:

      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。

      【讨论】:

        【解决方案4】:

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

        p.setopt(pycurl.VERBOSE, 0)
        

        【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 2020-02-24
        • 2023-03-19
        • 1970-01-01
        • 2021-01-12
        相关资源
        最近更新 更多