python - 使用 rpc 创建用于控制守护进程的 CLI 客户端
问题描述
我想为守护进程构建一个 cli 客户端。要构建 cli,我想使用 cli 库,例如 click 或 fire(其他也可以)。我以为我可以使用 rpc 来控制守护程序功能,但这似乎不起作用。
我使用点击尝试了以下方法:
######## Daemon ########
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
import click
@click.group()
def cli():
pass
@cli.command()
@click.argument("a")
@click.argument("b")
def add(a,b):
return a + b
@cli.command()
@click.argument("a")
@click.argument("b")
def subtract(a,b):
return a - b
with SimpleXMLRPCServer(('localhost', 8000), requestHandler=RequestHandler) as server:
server.register_introspection_functions()
server.register_function(cli)
客户是
####### Client ########
import xmlrpc.client
port = 8000
proxy_address = "http://localhost:" + str(port) + "/"
with xmlrpc.client.ServerProxy(proxy_address) as proxy:
proxy.cli()
我在这里得到的错误是:AttributeError: 'Group' object has no attribute '__name__'
在server.register_function(cli)
守护进程中。
假设我可以解决这个问题,我会遇到cli
函数输出在守护进程而不是客户端中打印的问题。
我试图找到一个本地处理这个问题的 cli 客户端,但我能找到的只是https://github.com/F483/apigen,它已经 5 年没有更新了。
有用的链接:
解决方案
推荐阅读
- git - 如何检查我是否已经完成了 git commit --amend over some commit?
- timeline - 使用 vis 示例创建时间线
- inno-setup - 如何在单个 Inno Setup 安装程序中添加 x86 和 x64 VC++ 2019 Redistributables?
- python - Python 正则表达式从字符串中间删除特殊字符并忽略其他任何内容
- python - 如何将链表的最后一个元素移动到python中的第一个元素(下面的代码)?
- javascript - Divs被切断了?
- c++ - 混合 Rcpp 模块和 Rcpp::export
- java - TabLayout 迁移到 AndroidX
- python - 如何在python中的zip文件夹中创建文件?
- c++ - 如何在 Cython 中链接嵌套的 C++ 库