【问题标题】:Calling a Python module from Perl从 Perl 调用 Python 模块
【发布时间】:2010-08-09 15:50:36
【问题描述】:

我用 Python 创建了一个模块,它提供了大约十几个功能。虽然它将主要在 Python 中使用,但仍有很大一部分旧用户将从 Perl 中调用它。

插入此模块的最佳方法是什么?我的想法是:

  1. 提供作为命令行实用程序的功能并进行system 调用
  2. 创建某种服务器并处理 RPC 调用(例如,通过 JSON RPC)

有什么建议吗?

【问题讨论】:

    标签: python perl interop


    【解决方案1】:

    另一种选择是直接在 Perl 脚本中内联 Python,使用 Inline::Python

    这可能比其他解决方案更简单,并且只需要一个额外的模块。

    【讨论】:

    • Inline::Python 运行良好,但在传递某些类型的变量时可能会有些奇怪。
    • 谢谢。我喜欢所有的答案,但这似乎非常便携。
    【解决方案2】:

    在短期内,最简单的解决方案是使用 Inline::Python。紧随其后的是调用命令行脚本。

    从长远来看,使用服务器提供 RPC 功能或简单地调用命令行脚本将为您提供最面向未来的解决方案。

    为什么?

    因为这样您就不必依赖 Perl 或 Python 作为用于构建使用您的库提供的服务的系统的语言。任何一种方法都会创建一个清晰的、独立于语言的界面,您可以将其与您采用的任何开发环境一起使用。

    根据您的需要,提供的任何选项都可能是“最佳选择”。根据您的需求随时间的变化情况,不同的选择可能会显示为“最佳”。

    我的方法是问几个问题:

    您多久更换一次开发工具。您已经从 Perl 切换到 Python。你是从 Tcl 开始然后转到 Perl 的吗?您打算在 1、5 或 10 年后切换到令人兴奋的新语言 X 吗?如果您“经常”更换工具(无论这意味着什么),请强调跨工具兼容性。

    多快才算快?命令行解决方案的启动时间可以吗? Inline::Python 是不是太慢了(你还在初始化一个 Python 解释器,它只是嵌入到你的 Perl 解释器中)?

    根据这些问题的答案,我会做最简单但可能有效的事情

    我猜这意味着按顺序:

    1. 内联::Python
    2. 命令行脚本
    3. 构建 RPC 服务器

    【讨论】:

      【解决方案3】:

      提供作为命令行实用程序的功能并进行系统调用

      工作得非常好。这就是 Python(和 Perl)等程序的使用方式。

      【讨论】:

      • 很难击败简单且经过良好测试的,不是吗?
      • 当然,除非他们需要在 Python 解释器的启动成本(预期执行次数的倍数)太高的环境中运行。以应用程序或 Web 服务器为例。 Perl 的使用方式旨在以适合情况的方式使用。
      • @DVK:Python 可以以多种方式使用,而且每种方式都适用于不同的情况。你知道这个问题适用于什么情况吗?
      • @S.Lott - 我不知道,但我的意思是你也不知道,但你推荐了一种解决方案,但没有明确解释它适合哪些情况。而且,老实说,OP 提到了具有 RPC 调用的服务器这一事实使人们倾向于认为可能有 some 原因他们不认为命令行 system() 调用是显而易见的解决方案
      • @DVK:我的意思是,您似乎对一个没有任何实际依据的有效解决方案过于挑剔。例如,您可以要求发布问题的人进行澄清,而不是做出假设。我发现很多人对标准的 Unix 设计模式一无所知,其中包含许多协作进程。如果这是 Perl 和 Python 之间的管道(两个进程在计算期间运行),那么几乎没有分叉开销。所以,我希望你能减轻批评的严厉。你可能是对的。但我们都不知道,不是吗?
      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2010-12-29
      相关资源
      最近更新 更多