首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:使用rpyc进行远程日志记录

Python:使用rpyc进行远程日志记录
EN

Stack Overflow用户
提问于 2017-03-19 09:45:53
回答 1查看 841关注 0票数 1

嗨,我正在使用rpyc模块连接到一个远程机器,并在它上执行一些东西。在处理过程中,远程机器可能会记录一些内容,因此我需要将其重定向到本地机器。

为了重定向日志,我遇到了这个奇怪的异常:

代码语言:javascript
复制
import rpyc


c = rpyc.classic.connect("localhost")
l = c.modules["logging"].getLogger("foo")

for h in l.handlers:
    print h

此循环导致引发异常:

代码语言:javascript
复制
2017-03-19 11:38:29,180 - protocol.py    :312  - DEBUG      - Exception caught
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/rpyc-3.2.3-py2.7.egg/rpyc/core/protocol.py", line 302, in _dispatch_request
res = self._HANDLERS[handler](self, *args)
File "/usr/lib/python2.7/site-packages/rpyc-3.2.3-py2.7.egg/rpyc/core/protocol.py", line 560, in _handle_callattr
return self._handle_getattr(oid, name)(*args, **dict(kwargs))
StopIteration

有人看到我做错了什么吗?为什么我不能在l.handlers上迭代?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 10:54:01

StopIteration是python在迭代器耗尽元素时引发的异常,消耗它们的循环应该停止(通常)。rpyc似乎没有认识到StopIteration异常的特殊性质,而只是将其抛出为代码崩溃的错误。

解决方案可能是不对远程集合进行迭代,而是首先将其转换为本地集合(如果可能的话)。您可以尝试以下操作(尽管它很可能会与前面的错误一样崩溃,因为将某些内容转换为list也必须对其进行迭代):

代码语言:javascript
复制
local_handlers = list(l.handlers)
for h in local_handlers:
    print(h)

顺便说一句,Pyro4确实正确地处理远程迭代。,您可以在远程迭代器和生成器上循环。(虽然它的工作方式与rpyc略有不同,但是您的代码不会直接翻译)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42885097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档