【问题标题】:xmlrpc newPaste - expected an object with the buffer interfacexmlrpc newPaste - 期望一个具有缓冲区接口的对象
【发布时间】:2011-07-25 11:45:37
【问题描述】:

在py2中有

rv = xmlrpc.pastes.newPaste(language, code, None, filename, mimetype, private)

我收到错误:期望一个带有缓冲区接口的对象

找不到任何关于 xmlrpc 和 py3 的文档。我只找到了这个 sn-p :

p1 = subprocess.Popen(['gpg','--clearsign'], stdin = subprocess.PIPE, stdout=subprocess.PIPE)
p1.stdin.write(bytes(input, 'UTF8'))
output = p1.communicate()[0]

s = ServerProxy('http://paste.pocoo.org/xmlrpc/')
pasteid = s.pastes.newPaste('text',output.decode())
print ("http://paste.pocoo.org/raw/",pasteid,"/", sep="")

但我仍然对此感到困惑......我的版本使用了很多参数,我在哪里可以找到它的完整描述/修复它?

谢谢。

【问题讨论】:

  • 参数与您已经使用的相同。您只需确保文本是str,而不是bytes

标签: python python-3.x xmlrpclib


【解决方案1】:

该错误消息通常意味着它正在寻找 str (在 Python 3 中是 Unicode),而不是 bytes 。就像在示例中一样,您需要解码以字节为单位的参数。也许:

rv = xmlrpc.pastes.newPaste(language, code.decode(), None, filename, mimetype, private)

但是如果不看你的代码就很难判断出问题所在。

【讨论】:

  • 只有 None 和私有的非 str 元素
  • @nCdy:你能用一些非私有的例子来复制它吗?因为如果code 是字节而不是str,则该错误正是我所看到的。
【解决方案2】:

在 Python 3 中,xmlrpclib 被拆分为两个模块,xmlrpc.clientxmlrpc.server

3.2.1 的文档可以在以下位置找到:

http://docs.python.org/release/3.2.1/library/xmlrpc.client.html

http://docs.python.org/release/3.2.1/library/xmlrpc.server.html

【讨论】:

  • 问题中的sn-p与xmlrpc有很大关系。这就是 ServerProxy 类的来源。
  • 嗯,它确实有帮助。 output.decode() 是他需要用来纠正该错误的那种东西。
  • 仍然不知道如何解决我的问题,但感谢您的文档。
  • @Thomas 是对的,nCdy,str 在 Python3 中已更改为 bytes,“字符串”类型为 unicode。你应该在你传递的任何字符串(实际上是bytes)上尝试.decode(),这样它们就会变成unicode
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2023-03-29
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多