在不使用经典 RPyC 的情况下将 RPyC 的标准输出重定向到本地客户端
Posted
技术标签:
【中文标题】在不使用经典 RPyC 的情况下将 RPyC 的标准输出重定向到本地客户端【英文标题】:Redirecting stdout for RPyC to local client without using Classic RPyC 【发布时间】:2014-05-27 14:39:33 【问题描述】:使用 RPyC 服务时如何将标准输出重定向到本地客户端?我知道在使用 Classic RPyC 时可以使用
c = rpyc.classic.connect(ip)
c.modules.sys.stdout = sys.stdout
有没有人有我可以在客户端使用的等效代码来实现如下用户定义的服务
class remoteServer(rpyc.Service):
def on_connect(self):
# code that runs when a connection is created
# (to init the serivce, if needed)
if not os.path.exists(self.LOG_DIRECTORY_PATH):
os.mkdir(self.LOG_DIRECTORY_PATH);
file = open(self.LOG_FILENAME, 'a');
else:
print 'Directory: ', self.LOG_DIRECTORY_PATH, 'already exists';
if __name__ == "__main__":
server = ThreadedServer(remoteServer, port = 12345)
server.start()
【问题讨论】:
所以只需要支持连接单个客户端? 【参考方案1】:我会这样做
class RedirectingService(rpyc.Service):
def exposed_redirect(self, stdout):
sys.stdout = stdout
def exposed_restore(self):
sys.stdout = sys.__stdout__
然后
c = rpyc.connect("server", config="allow_public_attrs":True)
c.redirect(sys.stdout)
...
c.restore()
查看http://rpyc.readthedocs.org/en/latest/api/core_protocol.html#rpyc.core.protocol.DEFAULT_CONFIG 了解配置选项。经典模式基本上将所有内容都设置为 True,这可能不安全,但您可以控制要显式设置的选项。
【讨论】:
太棒了!我正在学习rypc。除了官方网站,我在哪里可以找到更多的样本以上是关于在不使用经典 RPyC 的情况下将 RPyC 的标准输出重定向到本地客户端的主要内容,如果未能解决你的问题,请参考以下文章