Pergunta

Eu sou um novato Python, tentando usar pycurl. O projeto que estou trabalhando é a criação de um invólucro de Python para a API twitpic.com ( http://twitpic.com/ api.do ). Para fins de referência, veja o código ( http://pastebin.com/f4c498b6e ) e o erro que eu' m recebendo ( http://pastebin.com/mff11d31 ).

Preste atenção especial para a linha 27 do código, que contém "xml = server.perform ()". Depois de pesquisar o meu problema, eu descobri que, ao contrário eu tinha pensado anteriormente, .Executar () não retorna a resposta xml a partir twitpic.com, mas nenhum, quando o upload for bem-sucedido (duh!).

Depois de olhar para a saída de erro ainda mais, parece-me que a entrada de xml que eu quero recheado na variável "xml" é, em vez de ser impresso na saída padrão éter ou erro padrão (não tenho certeza qual). Eu tenho certeza que há uma maneira fácil de fazer isso, mas eu não consigo pensar nisso no momento. Se você tem alguma dica que possa me apontar na direção certa, eu ficaria muito grato. Agradecemos antecipadamente.

Foi útil?

Solução

O pycurl doc diz explicitamente:

executar () -> Nenhum

Assim, o resultado esperado é o que você observa.

olhando para um exemplo a partir do site pycurl:

import sys
import pycurl

class Test:
   def __init__(self):
       self.contents = ''

   def body_callback(self, buf):
       self.contents = self.contents + buf

print >>sys.stderr, 'Testing', pycurl.version

t = Test()
c = pycurl.Curl()
c.setopt(c.URL, 'http://curl.haxx.se/dev/')
c.setopt(c.WRITEFUNCTION, t.body_callback)
c.perform()
c.close()

print t.contents

A interface requer uma instância de classe - Test() - com um retorno de chamada específica para salvar o conteúdo. Observe o c.setopt(c.WRITEFUNCTION, t.body_callback) chamada - algo como isso está faltando no seu código, para que você não receber quaisquer dados (buf no exemplo). O exemplo mostra como acessar o conteúdo:

print t.contents

Outras dicas

Usando um StringIO seria muito mais limpo, nenhum ponto em usar uma classe manequim assim se tudo que você quer é os dados de resposta ...

Algo como isso seria suficiente:

import pycurl
import cStringIO

response = cStringIO.StringIO()

c = pycurl.Curl()
c.setopt(c.URL, 'http://www.turnkeylinux.org')
c.setopt(c.WRITEFUNCTION, response.write)
c.perform()
c.close()

print response.getvalue()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top