Python 远程过程调用(不含远程部分)

Mar*_*row 5 python rpc daemon ipc

我有一个未以 root 身份运行的 Python 服务器,它位于我正在开发的应用程序前面。然而,有一些应用程序功能需要访问 RAW 套接字,这意味着 root 权限。

显然我不想以 root 身份运行主服务器,所以我的解决方案是创建一个守护进程或命令行脚本,它以 root 身份运行,提供对上述功能的保护访问。

但是,我想搁置 stdin/stdout 通信并使用 RPC 交互风格,例如Pyro。但这会将 RPC 接口暴露给任何可以访问该机器的网络,而我知道调用 RPC 方法的进程将是同一台机器上的另一个进程。

是否没有一种可以以类似(仅限本地机器)方式使用的进程间过程调用标准?我想象服务器做这样的事情:

# Server not running as root
pythonically, returned, values = other_process_running_as_root.some_method()
Run Code Online (Sandbox Code Playgroud)

以 root 身份运行的进程暴露了一个方法:

# Daemon running as root
@expose_this_method
def some_method():
    # Play with RAW sockets
    return pythonically, returned, values
Run Code Online (Sandbox Code Playgroud)

这样的事情有可能吗?

Tho*_*s K 3

根据我的评论,我很想看看这是否可能,所以我尝试将其放在一起: https: //github.com/takowl/ZeroRPC

请记住,这是在一个小时左右的时间内拼凑而成的,因此它几乎肯定不如任何严重的解决方案(例如,服务器端的任何错误都会使其崩溃......)。但它按照你的建议工作:

服务器:

rpcserver = zerorpc.Server("ipc://myrpc.ipc")

@rpcserver.expose
def product(a, b):
    return a * b

rpcserver.run()
Run Code Online (Sandbox Code Playgroud)

客户:

rpcclient = zerorpc.Client("ipc://myrpc.ipc")

print(rpcclient.product(5, 7))
rpcclient._stopserver()
Run Code Online (Sandbox Code Playgroud)