我有一个Pyro4守护进程,我希望返回到LDAP的连接(由python-ldap模块实例化)。代码简短而简单,但是当我尝试将连接返回到客户端脚本时,我遇到了错误(我相信)连接对象的序列化。
class LDAPDaemon(object):
def get_ldap_connection(self):
conn = ldap.initialize("ldap://ds1")
conn.simple_bind_s("cn=Directory Manager", "abc123")
return conn
daemon = Pyro4.Daemon(unixsocket="/tmp/ldap_unix.sock")
os.system("chmod 700 /tmp/ldap_unix.sock")
uri=daemon.register(LDAPDaemon(), "LDAPDaemon")
daemon.requestLoop()
然后在我的驱动程序脚本中,我有以下内容(假设uri已知,为了简洁起见切掉了所有内容):
with Pyro4.Proxy(uri) as ldap_daemon:
conn = ldap_daemon.get_ldap_connection()
这会导致以下错误:
Traceback (most recent call last):
File "./tester.py", line 14, in <module>
conn = ldap_daemon.get_ldap_connection()
File "/opt/csw/lib/python2.6/site-packages/Pyro4/core.py", line 160, in __call__
return self.__send(self.__name, args, kwargs)
File "/opt/csw/lib/python2.6/site-packages/Pyro4/core.py", line 318, in _pyroInvoke
raise data
AttributeError: __class__
我尝试更改Pyro4配置以接受不同的序列化程序,即:
Pyro4.config.SERIALIZERS_ACCEPTED = set(['json', 'marshal', 'serpent', 'pickle'])
但这并没有改变任何事情。
请忽略明显的安全漏洞,因为这是为了产生错误而导致最基本的代码。
答案 0 :(得分:1)