从Perl调用Python模块

9 投票
3 回答
9993 浏览
提问于 2025-04-16 02:32

我在Python中创建了一个模块,提供了大约十几种功能。虽然这个模块主要是供Python使用,但也有一部分老用户会从Perl中调用它。

那么,给这个模块添加插件的最佳方法是什么呢?我有以下几个想法:

  1. 把功能做成命令行工具,然后通过system调用它们。
  2. 创建一个服务器,处理远程过程调用(比如,通过JSON RPC)。

有什么建议吗?

3 个回答

3

提供命令行工具的功能,并进行系统调用。

这样做效果很好。这就是像Python(和Perl)这样的程序应该使用的方式。

9

短期内,最简单的解决办法是使用 Inline::Python。紧接着就是调用命令行脚本。

从长远来看,使用服务器来提供远程过程调用(RPC)功能,或者简单地调用命令行脚本,会让你的解决方案更具未来适应性。

为什么呢?

因为这样你就不再局限于使用 Perl 或 Python 这两种语言来构建那些使用你库提供的服务的系统。无论哪种方法,都能创建一个清晰的、与语言无关的接口,这样你可以在任何开发环境中使用。

根据你的需求,以上提到的任何选项都可能是“最佳选择”。随着时间的推移,需求的变化可能会让你发现其他选择更合适。

我会从几个问题入手:

你多久会更换开发工具一次?你是从 Perl 转到 Python 的。之前是从 Tcl 转到 Perl 吗?你打算在 1 年、5 年或 10 年后转向新的语言 X 吗?如果你“经常”更换工具(不管这个频率具体指什么),那么就要强调工具之间的兼容性。

什么样的速度算快?命令行解决方案的启动时间可以接受吗?Inline::Python 会不会让速度变得太慢(毕竟你还是在初始化一个 Python 解释器,只不过它嵌入在你的 Perl 解释器里)?

根据这些问题的答案,我会选择最简单且可能有效的方案

我猜这意味着按以下顺序:

  1. Inline::Python
  2. 命令行脚本
  3. 构建一个 RPC 服务器
19

还有一个选择是直接在你的Perl脚本中嵌入Python代码,可以使用Inline::Python这个工具。

这样做可能比其他解决方案更简单,只需要再加一个模块就可以了。

撰写回答