从Perl调用Python模块
我在Python中创建了一个模块,提供了大约十几种功能。虽然这个模块主要是供Python使用,但也有一部分老用户会从Perl中调用它。
那么,给这个模块添加插件的最佳方法是什么呢?我有以下几个想法:
- 把功能做成命令行工具,然后通过
system
调用它们。 - 创建一个服务器,处理远程过程调用(比如,通过JSON RPC)。
有什么建议吗?
3 个回答
提供命令行工具的功能,并进行系统调用。
这样做效果很好。这就是像Python(和Perl)这样的程序应该使用的方式。
短期内,最简单的解决办法是使用 Inline::Python。紧接着就是调用命令行脚本。
从长远来看,使用服务器来提供远程过程调用(RPC)功能,或者简单地调用命令行脚本,会让你的解决方案更具未来适应性。
为什么呢?
因为这样你就不再局限于使用 Perl 或 Python 这两种语言来构建那些使用你库提供的服务的系统。无论哪种方法,都能创建一个清晰的、与语言无关的接口,这样你可以在任何开发环境中使用。
根据你的需求,以上提到的任何选项都可能是“最佳选择”。随着时间的推移,需求的变化可能会让你发现其他选择更合适。
我会从几个问题入手:
你多久会更换开发工具一次?你是从 Perl 转到 Python 的。之前是从 Tcl 转到 Perl 吗?你打算在 1 年、5 年或 10 年后转向新的语言 X 吗?如果你“经常”更换工具(不管这个频率具体指什么),那么就要强调工具之间的兼容性。
什么样的速度算快?命令行解决方案的启动时间可以接受吗?Inline::Python 会不会让速度变得太慢(毕竟你还是在初始化一个 Python 解释器,只不过它嵌入在你的 Perl 解释器里)?
根据这些问题的答案,我会选择最简单且可能有效的方案。
我猜这意味着按以下顺序:
- Inline::Python
- 命令行脚本
- 构建一个 RPC 服务器
还有一个选择是直接在你的Perl脚本中嵌入Python代码,可以使用Inline::Python
这个工具。
这样做可能比其他解决方案更简单,只需要再加一个模块就可以了。