2010-08-09 3 views
7

Ich habe ein Modul in Python erstellt, das etwa ein Dutzend Funktionalitäten bietet. Obwohl es hauptsächlich in Python verwendet wird, gibt es einen guten Teil der alten Benutzer, die es von Perl aus aufrufen.Aufruf eines Python-Moduls aus Perl

Was ist der beste Weg, um ein Plug in dieses Modul zu machen? Meine Gedanken sind:

  1. die Funktionalitäten als Kommandozeilen-Dienstprogramme bieten und system Anrufe
  2. erstellen eine Art von Server machen und RPC-Aufrufe (sagen wir, über JSON-RPC)

Jede beraten behandeln?

Antwort

19

Eine andere Möglichkeit besteht darin, Python direkt in Ihrem Perl-Skript mit Inline::Python zu verknüpfen.

Dies ist möglicherweise einfacher als andere Lösungen und erfordert nur ein zusätzliches Modul.

+0

Inline :: Python ziemlich gut funktioniert, kann es Seien Sie jedoch etwas seltsam, wenn Sie bestimmte Arten von Variablen übergeben. – GWW

+0

Danke. Ich mochte alle Antworten, aber das scheint sehr portabel. – Escualo

3

die Funktionalitäten als Kommandozeilenprogramme und ein System ruft

Works wirklich schön machen. Auf diese Weise sollen Programme wie Python (und Perl) verwendet werden.

+0

Schwer zu schlagen einfach und gut getestet, nicht wahr? – dawg

+5

Außer natürlich, wenn sie in einer Umgebung laufen müssen, in der die Startkosten eines Python-Interpreters (Zeiten der erwarteten Ausführungen) viel zu hoch sind. Wie eine App oder ein Webserver als Beispiel. Die Art und Weise, wie Perl verwendet werden soll, ist situationsgerecht. – DVK

+1

@DVK: Python kann auf verschiedene Arten verwendet werden, auch für verschiedene Situationen. Weißt du, welche Situation für diese Frage gilt? –

9

In der kurzen Ausführung ist die einfachste Lösung, Inline :: Python zu verwenden. Kurz darauf wird ein Befehlszeilenskript aufgerufen.

Wenn Sie auf lange Sicht einen Server verwenden, um RPC-Funktionalität bereitzustellen oder einfach ein Befehlszeilenskript aufzurufen, erhalten Sie die zukunftssicherste Lösung.

Warum?

Dadurch sind Sie nicht an Perl oder Python als Sprache gebunden, die zum Erstellen der Systeme verwendet wird, die die von Ihrer Bibliothek bereitgestellten Dienste nutzen. Beide Methoden erstellen eine klare, sprachunabhängige Schnittstelle, die Sie in jeder Entwicklungsumgebung verwenden können, die Sie verwenden.

Je nach Ihren Anforderungen können einige der angebotenen Optionen die "beste Wahl" sein. Abhängig davon, wie sich Ihre Bedürfnisse im Laufe der Zeit entwickeln, kann eine andere Wahl als "beste" enthüllt werden.

zu dieser Mein Ansatz wäre, ein paar Fragen zu stellen:

Wie oft ändern Sie Entwicklungs-Tools. Sie sind von Perl zu Python gewechselt. Hast du mit Tcl angefangen und bist nach Perl gegangen? Wirst du in 1, 5 oder 10 Jahren auf die spannende neue Sprache X wechseln? Wenn Sie die Werkzeuge häufig ändern (was auch immer das bedeutet), sollten Sie die Kompatibilität mit Cross-Tools betonen.

Wie schnell ist schnell genug? Ist die Startzeit für Befehlszeilenlösungen in Ordnung? Verlangsamt Inline :: Python die Dinge zu sehr (Sie initialisieren immer noch einen Python-Interpreter, der nur in Ihren Perl-Interpreter eingebettet ist)?

Basierend auf den Antworten auf diese Fragen würde ich tun die einfachste Sache, die wahrscheinlich arbeiten wird.

Meine Vermutung ist, das heißt, in dieser Reihenfolge:

  1. Inline :: Python
  2. Befehlszeilenscripts
  3. einen RPC-Server-Build