无法将* IO()对象分配给WRITEDATA,pycurl

时间:2015-01-06 23:09:45

标签: python pycurl

其他人都注意到pycurl示例在Python 2上不起作用。*?

import pycurl
from StringIO import StringIO

buffer = StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://pycurl.sourceforge.net/')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()

body = buffer.getvalue()
# Body is a string in some encoding.
# In Python 2, we can print it without knowing what the encoding is.
print(body)

然后我得到了这样的失败

Traceback (most recent call last):
  File "./get_python2.py", line 9, in <module>
    c.setopt(c.WRITEDATA, buffer)
TypeError: invalid arguments to setopt

分配WRITEFUNCTION&amp;其他人似乎像宣传的那样运作。任何人都知道这里发生了什么?

2 个答案:

答案 0 :(得分:6)

我认为docs表示当您没有真正的文件对象时必须使用WRITEFUNCTION

  

在Python 3和Python 2上,当值不是真正的文件对象时,WRITEDATA通过WRITEFUNCTION在PycURL中进行模拟。

所以你需要使用:

c.setopt(c.WRITEFUNCTION, buffer.write)

修改

PycURL Quickstart使用WRITEDATA作为StringIO的示例,但它需要PycURL&gt; =版本7.19.3:

  

从PycURL 7.19.3开始,WRITEDATA接受任何带有write方法的Python对象

答案 1 :(得分:0)

尝试     c.setopt(c.WRITEFUNCTION,buffer.write)

我有完全相同的问题,并且它以这种方式工作。 pycurl(7.19.0)