在 python 中使用 subprocess 或 rpc / rest 与另一个程序通信?

Posted

技术标签:

【中文标题】在 python 中使用 subprocess 或 rpc / rest 与另一个程序通信?【英文标题】:Communicate with another program using subprocess or rpc / rest in python? 【发布时间】:2012-01-28 20:57:30 【问题描述】:

我有一个用 c++ 编写的程序的情况。它是一种您需要首先启动的服务器。然后,您可以从另一个 konsole 调用传递命令行参数的程序,它会做一些事情。它还提供基于 rpc 和 rest 的访问。因此,您可以编写一个基于 rpc 或 rest 的库来与服务器交互。 所以我的问题是,既然程序可以仅使用命令行参数进行管理,那么使用 python 的 subprocess 模块并围绕它构建一个库(包装器)不是更好吗?或者这个方法有什么问题吗? 考虑另一种情况。假设我想围绕任何 linux 实用程序(如 grep)构建一个 GUI,它允许用户测试正则表达式(就像我们在网站上所做的那样)。那么使用子进程与 grep 通信不是更容易吗? 谢谢。

【问题讨论】:

【参考方案1】:

我想我更喜欢使用任何 rpc 或 rest 接口,因为您可以从它们获得的结果通常采用易于解析的格式,因为这些接口是为机器交互而设计的。然而,命令行界面是为人机交互而设计的,这意味着输出很容易被人眼解析,但不一定由接收输出的另一个程序来解析。

【讨论】:

好的,我决定使用 RPC 或 REST 而不是子进程,因为它允许我的程序远程运行。如果使用 RPC,谷歌的 protobuf 是否适合这个?还是我应该采用正常的 urllib 方式? 我认为最好的策略是坚持在服务器端使用的相同技术。

以上是关于在 python 中使用 subprocess 或 rpc / rest 与另一个程序通信?的主要内容,如果未能解决你的问题,请参考以下文章

Python,使用 subprocess.Popen 进行 linux 命令行调用?我收到“[Errno 2] 没有这样的文件或目录”

python subprocess模块

subprocess模块

在 Python 中对 subprocess.PIPE 进行非阻塞读取

在 Python 中对 subprocess.PIPE 进行非阻塞读取

在 Python 中对 subprocess.PIPE 进行非阻塞读取