【发布时间】:2010-08-09 15:50:36
【问题描述】:
我用 Python 创建了一个模块,它提供了大约十几个功能。虽然它将主要在 Python 中使用,但仍有很大一部分旧用户将从 Perl 中调用它。
插入此模块的最佳方法是什么?我的想法是:
- 提供作为命令行实用程序的功能并进行
system调用 - 创建某种服务器并处理 RPC 调用(例如,通过 JSON RPC)
有什么建议吗?
【问题讨论】:
我用 Python 创建了一个模块,它提供了大约十几个功能。虽然它将主要在 Python 中使用,但仍有很大一部分旧用户将从 Perl 中调用它。
插入此模块的最佳方法是什么?我的想法是:
system 调用有什么建议吗?
【问题讨论】:
另一种选择是直接在 Perl 脚本中内联 Python,使用 Inline::Python。
这可能比其他解决方案更简单,并且只需要一个额外的模块。
【讨论】:
在短期内,最简单的解决方案是使用 Inline::Python。紧随其后的是调用命令行脚本。
从长远来看,使用服务器提供 RPC 功能或简单地调用命令行脚本将为您提供最面向未来的解决方案。
为什么?
因为这样您就不必依赖 Perl 或 Python 作为用于构建使用您的库提供的服务的系统的语言。任何一种方法都会创建一个清晰的、独立于语言的界面,您可以将其与您采用的任何开发环境一起使用。
根据您的需要,提供的任何选项都可能是“最佳选择”。根据您的需求随时间的变化情况,不同的选择可能会显示为“最佳”。
我的方法是问几个问题:
您多久更换一次开发工具。您已经从 Perl 切换到 Python。你是从 Tcl 开始然后转到 Perl 的吗?您打算在 1、5 或 10 年后切换到令人兴奋的新语言 X 吗?如果您“经常”更换工具(无论这意味着什么),请强调跨工具兼容性。
多快才算快?命令行解决方案的启动时间可以吗? Inline::Python 是不是太慢了(你还在初始化一个 Python 解释器,它只是嵌入到你的 Perl 解释器中)?
根据这些问题的答案,我会做最简单但可能有效的事情。
我猜这意味着按顺序:
【讨论】:
提供作为命令行实用程序的功能并进行系统调用
工作得非常好。这就是 Python(和 Perl)等程序的使用方式。
【讨论】:
system() 调用是显而易见的解决方案