【问题标题】:How can I use a Perl module from Python?如何使用 Python 中的 Perl 模块?
【发布时间】:2010-10-24 12:02:26
【问题描述】:

有一个 Perl 模块可以为我的 Python 应用程序提供完美的功能。 我有什么方法可以利用它吗? (它复杂,我需要一个月才能移植它)

我不想为每次使用都生成一个子进程,因为我需要它几十万次(它是一种特定类型的数据解析器)。

感谢您的建议。

编辑:要求模块。这是Mail::DeliveryStatus::BounceParser。它将邮件传递状态通知与可能指示退回邮件的字符串列表相匹配。 (它通过大量正则表达式以及其他测试运行 DSN 正文/标题。这是一个非常棒的模块。)

【问题讨论】:

  • 这取决于解析器接受和产生什么样的数据,但你可以在其上编写一个简单的 Perl 包装器,通过套接字/其他方式进行通信,并以这种方式来回发送数据。
  • 什么是模块?可能有一个 python 模块可以满足您的需要。

标签: python perl


【解决方案1】:

我不确定这是否仍然有效,但您可能对 PyPerl 感兴趣

仍然应该支持 python 中的大多数数据解析器。如果您可以指向您正在查看的解析器,那就太好了。

或者,您可以使用该 perl 模块创建一个完整的进程,并使用 IPC、套接字机制在您的 python 和 perl 进程中来回通信数据和结果。

【讨论】:

  • 感谢 Func 先生!我要么采用 tcp 套接字方式,要么将其粘贴到后缀策略服务器中。感谢您的回答!
【解决方案2】:

我知道您可以通过Inline::Python 在 Perl 中使用 Python,但这不是您的问题。也许 Python 中也有类似的功能。也许像perlmodule 这样的东西?

【讨论】:

  • 这个答案(perlmodule)绝对应该被后代认可,尽管得到复选标记的答案更适合我的特殊情况。请大家点赞!
【解决方案3】:

我会使用 HTTP::Server::Simple 之类的东西来创建本地 Web 服务。然后你只需要对它进行查询。它仍然是一个外部进程,但它只是一个。

【讨论】:

    【解决方案4】:

    我不想为每次使用都生成一个子进程,因为我需要它几十万次(它是一种特定类型的数据解析器)。

    糟糕的政策。基本的 Linux shell 一直在执行这种进程分叉。避免进程产生是一个不好的限制。

    但是,您可以轻松地做到这一点。

    python prepare_data.py | perl my_magic_module.pl | python whatever_else.py
    

    将您的魔法模块包装在一个简单的 perl 脚本中,该脚本从标准输入读取、执行神奇的操作并写入标准输出。

    将您的 Python 分成两部分:调用 perl 之前完成的部分和调用 perl 之后完成的部分。

    组装一个高性能管道,该管道 (a) 同时执行所有三个步骤,并且 (b) 不会分叉很多进程。

    顺便说一句,这也将使用您拥有的每个核心。

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2010-09-16
      • 1970-01-01
      • 2013-08-25
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多