3

私はpyCurlを使用しようとしているPython初心者です。私が取り組んでいるプロジェクトでは、twitpic.com API ( http://twitpic.com/api.do ) の Python ラッパーを作成しています。参考までに、コード ( http://pastebin.com/f4c498b6e ) とエラー( http://pastebin.com/mff11d31 ) を確認してください。

「xml = server.perform()」が含まれているコードの 27 行目に特に注意してください。問題を調査したところ、以前考えていたのとは異なり、.perform() は twitpic.com からの xml 応答を返さず、アップロードが成功したときに None を返すことがわかりました (当たり前!)。

エラー出力をさらに調べた後、「xml」変数に詰め込みたいxml入力が、代わりに標準出力または標準エラーに出力されているように思えます(どちらかはわかりません)。これを行う簡単な方法があると確信していますが、現時点では考えられないようです。正しい方向に私を向けることができるヒントがあれば、私は非常に感謝しています. 前もって感謝します。

4

2 に答える 2

12

StringIO を使用すると、はるかにクリーンになります。応答データだけが必要な場合、そのようなダミー クラスを使用しても意味がありません。

このようなもので十分です:

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()
于 2010-02-28T14:42:24.433 に答える
4

pycurlドキュメントは明示的に次のように述べています。

Perform()->なし

したがって、期待される結果はあなたが観察したものです。

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

Test()インターフェイスには、コンテンツを保存するための特定のコールバックを備えたクラスインスタンスが必要です。呼び出しに注意してくださいc.setopt(c.WRITEFUNCTION, t.body_callback)-このようなものがコードにないため、データを受信しません(buf例では)。この例は、コンテンツにアクセスする方法を示しています。

print t.contents
于 2008-11-02T06:35:34.433 に答える