我该如何在Python中使用Perl库?

6

我编写了一堆Perl库(实际上是Perl类),我想在我的Python应用程序中使用其中的一些。是否有一种自然的方法可以做到这一点,而不使用SWIG或编写Perl API for Python。我正在寻求类似于PHP的Perl 接口的方式。如果Python中没有这样的Perl工作方式。那么使用Perl类在Python中的最简单方法是什么?

5个回答

8
个人建议,通过XML/RPC或其他类似的机制将Perl库公开为服务,这样您可以以非常自然的方式从Python应用程序中调用它们。

谢谢Shane。目前我正在考虑两个选项,要么用Python重写,要么使用套接字实现一个用于通信的API,将两种语言连接起来。 - systemsfault

4
我没有尝试过,但Inline::Python可以让你从Perl中调用Python。
你应该能够使用一小段Perl代码来加载你的Python应用程序,然后使用I::P附带的perl Python包来访问你的Perl对象。

3

什么是在python中使用Perl类最简单的方法?

最简单的方法是将Perl重写为Python,然后完成它。认真地说,只选择一种语言会更容易。抛开Perl也没有什么大损失。将类重写为Python可能会为您提供改进它们的机会。

不太容易的方法是使用Python的subprocess模块运行Perl应用程序。这样可以毫无问题地使用Perl类于Perl应用程序中。您可以轻松创建管道,以便Perl从Python获取输入并向Python产生输出。

someApp.py | something.pl | finalStep.py

这样做的好处是将应用程序拆分成三个并发进程,使用大量处理器资源,并在1/3的时间内(有时)运行。

其他所有的事情都没有这么容易。


实际上,我尝试使用Perl API为Python提供的是你在第二步中描述的相同内容。我还必须为Python提供一个小型API,因为我的Perl库是pm文件,它们不是独立的可执行文件,所以我必须编写pl文件来访问py库。 - systemsfault

2

你错过了一个让 Python 与 Perl 在Parrot VM上运行的机会。在2009年4月1日PEP 401被发布,FLUFL的官方行为之一是:

  • 承认 C 是一种20世纪的语言,几乎被30岁以下的程序员普遍拒绝,CPython实现将在发布Python 2.6.2和3.0.2后终止。此后,Python的参考实现将针对Parrot虚拟机。Python的替代实现(例如Jython、IronPython和PyPy)已被正式禁止,但仍然被容忍。

2
哦,你惹上麻烦了:“本文档归Python Steering Union所有(切勿与Python Secret Underground混淆,后者坚决不存在)。我们认为你阅读本文档是可以的,但绝不能引用、复制、修改或分发其中的内容。” - mpeters
导航联盟会重新考虑吗? - gimel
1
我认为“4月1日”这部分可能应该加粗。在我仔细重新阅读之前,我感到相当困惑。 - A B
让人感到悲伤的是,考虑到PEP401可能在短短4个月内就会过时。 - gimel

1

欢迎查看PyPerl

警告:PyPerl目前未得到维护,因此如果您需要稳定性,请勿使用它。


3
稳定性对我来说是一个重要的度量指标。 - systemsfault
你最好将你的Perl类移植到Python。据我所知,PyPerl是目前唯一一种从Python代码调用Perl代码的简单方法。 - splicer
或者将Python代码移植到Perl :D。这可能需要更少的时间,因为Perl代码量比Python多得多。但在这种情况下,我会错过使用Python编写代码的机会,但我想这是可以容忍的 :)。 - systemsfault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接