标签: xmlrpclib

如何在python 3.4中安装xmlrpclib?

当我尝试安装xmlrpclib时,我在python 3.4版中遇到以下错误

下载/解压缩xmlrpclib无法找到满足要求的任何下载xmlrpclib忽略了一些外部托管文件(使用--allow-external xmlrpclib允许).正在清理...找不到xmlrpclib的所有发行版在/home/shiva/.pip/pip.log中存储失败的调试日志

如何在python 3.4中安装xmlrpclib?

python xml-rpc xmlrpclib xmlrpcclient python-3.4

15
推荐指数
2
解决办法
2万
查看次数

在python中使用带有SimpleXMLRPCServer的**kwargs

我有一个类,我希望使用pythons SimpleXMLRPCServer作为远程服务公开.服务器启动如下所示:

server = SimpleXMLRPCServer((serverSettings.LISTEN_IP,serverSettings.LISTEN_PORT))

service = Service()

server.register_instance(service)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

然后我有一个ServiceRemote类,如下所示:

def __init__(self,ip,port):
    self.rpcClient = xmlrpclib.Server('http://%s:%d' %(ip,port))

def __getattr__(self, name):
    # forward all calls to the rpc client
    return getattr(self.rpcClient, name)
Run Code Online (Sandbox Code Playgroud)

因此,ServiceRemote对象上的所有调用都将转发到xmlrpclib.Server,然后将其转发到远程服务器.问题是服务中采用名为varargs的方法:

@useDb
def select(self, db, fields, **kwargs):
    pass
Run Code Online (Sandbox Code Playgroud)

@useDb装饰器包装函数,在调用之前创建db并打开它,然后在调用完成之后关闭它,然后返回结果.

当我调用这个方法时,我得到错误" call()得到一个意外的关键字参数'name'".那么,是否可以远程调用采用变量命名参数的方法?或者我是否必须为我需要的每个方法变体创建一个覆盖.


谢谢你的回复.我改变了我的代码,所以问题不再是问题.但是现在我知道这个以供将来参考,如果我确实需要实现位置参数并支持远程调用.我认为Thomas和praptaks方法的结合会很好.通过xmlrpclient将kwargs转换为客户端上的位置args,并在方法服务器上使用包装器来解压缩位置参数.

python simplexmlrpcserver xmlrpclib

13
推荐指数
1
解决办法
5471
查看次数

将Python xmlrpclib与unix域套接字一起使用?

我正在尝试与之交互supervisord,我想通过unix socket(它是一个共享的托管环境)与它交谈.

到目前为止我尝试过的是:

import xmlrpclib
server = xmlrpclib.ServerProxy('unix:///path/to/supervisor.sock/RPC2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/xmlrpclib.py", line 1549, in __init__
    raise IOError, "unsupported XML-RPC protocol"
IOError: unsupported XML-RPC protocol
Run Code Online (Sandbox Code Playgroud)

/path/to/supervisor.sock肯定存在.使用'unix:///path/to/supervisor.sock/RPC2'形式的URI supervisord,这是我的想法.文档不讨论unix套接字:http://docs.python.org/library/xmlrpclib.html.

这可能吗?我应该使用不同的库吗?

python xml-rpc xmlrpclib unix-socket

11
推荐指数
3
解决办法
7151
查看次数

Python的xmlrpc非常慢:每次调用一秒钟

根据Python文档中的示例,我使用SimpleXMLRPCServer在Python中构建了一个xml-rpc服务器.我是在同一台机器上的Python客户端调用它.服务器功能的主体自己执行得非常快.

但我发现xmlrpc客户端性能极其缓慢,每次调用需要一秒钟.(使用xmlrpclib.)

我在网上找到的加速技术(跳过getfqdn解决方案)没有帮助.

我的连接URI是:

'http://localhost:50080'
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上运行Python 2.7 x64,但对于32位Python 2.7,它的工作原理相同.

python xml-rpc simplexmlrpcserver xmlrpclib

11
推荐指数
1
解决办法
3171
查看次数

如何在xmlrpc服务器上查看回溯,而不是客户端?

我有简单的xmlrpc服务器代码:

from SimpleXMLRPCServer import SimpleXMLRPCServer

port = 9999

def func():
    print 'Hi!'
    print x # error!
    print 'Bye!'

if __name__ == '__main__':
    server = SimpleXMLRPCServer(("localhost", port))
    print "Listening on port %s..." % port
    server.register_function(func)
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

示例会话.

客户:

>>> import xmlrpclib
>>> p = xmlrpclib.ServerProxy('http://localhost:9999')
>>> p.func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\lib\xmlrpclib.py", line 1199, in __call__
    return self.__send(self.__name, args)
  File "C:\Python26\lib\xmlrpclib.py", line 1489, in __request
    verbose=self.__verbose
  File "C:\Python26\lib\xmlrpclib.py", line 1253, in request
    return …
Run Code Online (Sandbox Code Playgroud)

python multithreading simplexmlrpcserver xmlrpclib xmlrpcclient

8
推荐指数
1
解决办法
2063
查看次数

嵌套线程SimpleXMLRPCServers时的python:httplib.CannotSendRequest

我在使用一串使用SocketServer.ThreadingMixin的SimpleXMLRPCServers时间歇性地收到httplib.CannotSendRequest异常.

我所说的'链'是指如下:

我有一个客户端脚本,它使用xmlrpclib来调用SimpleXMLRPCServer上的函数.反过来,该服务器调用另一个SimpleXMLRPCServer.我意识到这听起来有多复杂,但是有充分的理由选择了这种架构,我没有看到它不应该成为可能的原因.

(testclient)client_script ---calls--> 
    (middleserver)SimpleXMLRPCServer ---calls---> 
        (finalserver)SimpleXMLRPCServer --- does something
Run Code Online (Sandbox Code Playgroud)
  • 如果我不使用SocketServer.ThreadingMixin然后这个问题不会发生(但我需要多线程的请求,所以这没有帮助.)
  • 如果我只有一个级别的服务(即只是客户端脚本直接调用最终服务器),这不会发生.

我已经能够在下面的简单测试代码中重现该问题.有三个片段:

finalserver:

import SocketServer
import time
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

class AsyncXMLRPCServer(SocketServer.ThreadingMixIn,SimpleXMLRPCServer): pass

# Create server
server = AsyncXMLRPCServer(('', 9999), SimpleXMLRPCRequestHandler)
server.register_introspection_functions()

def waste_time():
    time.sleep(10)
    return True

server.register_function(waste_time, 'waste_time')
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

middleserver:

import SocketServer
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
import xmlrpclib

class AsyncXMLRPCServer(SocketServer.ThreadingMixIn,SimpleXMLRPCServer): pass

# Create server
server = AsyncXMLRPCServer(('', 8888), SimpleXMLRPCRequestHandler)
server.register_introspection_functions()

s = xmlrpclib.ServerProxy('http://localhost:9999')
def call_waste():
    s.waste_time()
    return True …
Run Code Online (Sandbox Code Playgroud)

python simplexmlrpcserver xmlrpclib httplib python-2.7

8
推荐指数
1
解决办法
5452
查看次数

python 2.7下xmlrpclib.ServerProxy的多线程问题

我有一个实例化xmlrpclib.ServerProxy一次的应用程序,然后将其传递给多个线程(Web应用程序请求),这些线程同时执行XML/RPC调用.这适用于python 2.6.使用python 2.7,我们在多线程环境中遇到很多错误(ResponseNotReady,CannotSendRequest).

# This code works well in python 2.6, and breaks in python 2.7.

import xmlrpclib
import thread

proxy = xmlrpclib.ServerProxy("http://localhost:5000/")

def fetch_users():
  print proxy.getUsers()

for _ in range(10):
  thread.start_new_thread(fetch_users, ())

while(1):
  pass
Run Code Online (Sandbox Code Playgroud)

这里有什么问题,是否有一种重新使用ServerProxy对象的线程安全方法?

python multithreading xml-rpc xmlrpclib python-2.7

6
推荐指数
1
解决办法
1535
查看次数

XML-RPC 方法可以在 Python 中按名称(作为字符串)调用吗?

在 python 中,调用 XML-RPC 方法涉及调用代理对象上的方法:

from xmlrpclib import ServerProxy
print ServerProxy('https://example.com/rpc').api.hello_there('John')
Run Code Online (Sandbox Code Playgroud)

在其他一些语言中,例如 perl,您可以将方法名称作为方法参数传递。

use Frontier::Client;
$p = Frontier::Client->new(url => 'https://example.com/rpc');
$result = $p->call('api.hello_there', 'John');
print $result;
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Python 中按名称(作为字符串)调用 XML-RPC 方法?

python xml-rpc xmlrpclib call getattr

5
推荐指数
1
解决办法
1579
查看次数

Python xmlrpclib 在传输时将 datetime 对象更改为 DateTime 实例

使用 Python 2.6.x 的 xmlrpclib 在客户端和服务器之间交换的消息在服务器端创建了一种“实例”类型,而不是“日期时间”类型。在客户端,我创建了一个新的

updateTime = datetime(year, month, day, hour, minute, second)
print type(updateTime)
print updateTime
Run Code Online (Sandbox Code Playgroud)

结果是

<type 'datetime.datetime'>
2015-10-07 10:21:52
Run Code Online (Sandbox Code Playgroud)

发送时,字典在客户端看起来像这样:

'updateTime': datetime.datetime(2015, 10, 7, 10, 21, 52)
Run Code Online (Sandbox Code Playgroud)

但是服务器端的传入字典是这样的:

'updateTime': <DateTime '20151007T10:21:52' at 7f4dbf4ceb90>
Run Code Online (Sandbox Code Playgroud)

打印类型及其字符串表示如下:

<type 'instance'>
20151007T10:21:52
Run Code Online (Sandbox Code Playgroud)

我们正在使用 xmlrpclib.ServerProxy 但将use_datetime更改为TrueFalse根本没有任何区别。

xmlrpclib.ServerProxy('https://'+rpc_server_addr, allow_none=True, use_datetime=True)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我也希望接收方有一个 tpye 'datetime.datetime'。

python datetime xml-rpc xmlrpclib python-datetime

5
推荐指数
1
解决办法
1084
查看次数

从命令行使用Electrum时没有模块名称'xmlrpclib'

我刚从Electrum.org的命令行安装了一个比特币钱包

继承人我如何在我的用户帐户目录中安装它../home/user/...

sudo pip3 install https://download.electrum.org/2.8.2/Electrum-2.8.2.tar.gz
Run Code Online (Sandbox Code Playgroud)

它安装没有问题.

当我尝试从命令行运行软件 electrum或如果我尝试electrum help我得到这个ImportError

(继承人的文件http://docs.electrum.org/en/latest/cmdline.html)

ImportError: No module named 'xmlrpclib'
Run Code Online (Sandbox Code Playgroud)

如果你试图复制它,那就是追溯

File "/usr/local/bin/electrum", line 71, in check_imports
import jsonrpclib

File "/usr/local/lib/python3.5/dist-packages/jsonrpclib/__init__.py", line 5, in <module>
from jsonrpclib.jsonrpc import Server, MultiCall, Fault

File "/usr/local/lib/python3.5/dist-packages/jsonrpclib/jsonrpc.py", line 50, in <module> 
from xmlrpclib import Transport as XMLTrasnport
Run Code Online (Sandbox Code Playgroud)

我已经做好了

sudo apt-get update

sudo apt-get upgrade

sudo pip install xmlrpclib

但没有用.

如果有人能够提供一些非常感激的见解.

python xmlrpclib python-import

5
推荐指数
1
解决办法
6970
查看次数