Empfehlungen für perl-to-python-Interoperationen?

Wir haben eine große Codebasis in Perl. Für die voraussichtliche Zukunft bleibt unsere Codebasis in Perl. Allerdings suchen wir in das Hinzufügen eines GUI-basierten Dashboard-Dienstprogramms. Wir überlegen, das Dashboard in Python (mit tkinter oder wx) zu schreiben. Das Problem ist jedoch, dass wir unsere vorhandene Perl-Codebasis in der Python-GUI nutzen möchten.

Also … irgendwelche Vorschläge, wie dies zu erreichen? Wir erwägen einige Optionen:

  1. Schreiben Sie ausführbare Dateien (in Perl), die Funktionsaufrufe nachahmen; Ruf die Perl-ausführbaren Dateien in python als Systemaufrufe auf.
  2. Schreiben Sie Perl ausführbare Dateien on-the-fly innerhalb des Python-Dashboards und rufen Sie die (temporäre) Perl-ausführbare Datei auf.
  3. Finden Sie irgendeine Art Perl-zu-Python-Konverter oder Bindung.

Irgendwelche anderen Ideen? Ich würde gerne hören, wenn andere Leute dieses Problem konfrontiert haben. Leider ist es keine Option, die Codebasis selbst zu Python zu diesem Zeitpunkt zu konvertieren.

7 Solutions collect form web for “Empfehlungen für perl-to-python-Interoperationen?”

Ich hasse es, ein anderer im Chor zu sein, aber …

  1. Vermeiden Sie die Verwendung einer alternativen Sprache
  2. Verwenden Sie Wx so ist es native Look and Feel macht die Anwendung sehen "real", um nicht-technische Zielgruppen.
  3. Laden Sie den Padre-Quellcode herunter und sehen Sie, wie es Wx Perl-Code macht, dann stempeln Sie zügellos aus seinen besten Tricks oder vielleicht nur gut aus und verwenden Sie die Anwendung Skelett (mit der künstlerischen Hälfte der Perl Dual-Lizenz, um es legal).
  4. Erstellen Sie Ihre eigene Strawberry Perl-Unterklasse, um die Anwendung als MSI-Installationsprogramm zu verpacken und es über die Active Directory-Domäne des Unternehmens zu drucken.

Natürlich habe ich nur das alles gesagt, weil du "Dashboard" gesagt hast, das ich als "Corporate" lese, was mich dann zu einem Microsoft AD Netzwerk macht …

Sie können einen Kinderprozess erstellen und einen IPC-Mechanismus wie Sockets oder STDIO verwenden oder sogar einen Interpreter in den anderen einbetten.

Aber warum wechseln die Sprachen, wenn Perl mehrere Tk ( Tk , Tkx und Tcl :: Tk ) -Bindungen und eine sehr fähige Wx-Bindung bietet ?

Ich habe GUI-Projekte mit Perls Tk- und Wx-Bibliotheken geschrieben und verteilt.

Wenn Sie die Möglichkeit haben, eigenständige ausführbare Dateien zu erstellen, schauen Sie sich PAR :: Packer , ActiveStates PerlApp und Cava Pacakger an .

Versuche die CPAN-Verteilung Python (Pyperl) für die Anbindung an Python-Code.

Nun, wenn Sie wirklich wollen, um die GUI in einer anderen Sprache zu schreiben (was ernsthaft ist, ist nur eine schlechte Idee, da es Sie mehr kosten wird, als es jemals davon profitieren könnte), was Sie tun sollten, ist folgendes:

  1. Dokumentieren Sie Ihre Perl App in Bezug auf die angebotenen Dienste. Sie sollten es mit XML Schema Definition – XSD – für die Datentypen und Web Service Description Language – WSDL – für den eigentlichen Service.
  2. Implementieren Sie die Dienste in Perl, möglicherweise mit Catalyst :: Controller :: SOAP oder nur XML :: Compile :: SOAP.
  3. Verbrauchen Sie die Dienste von Ihrer beliebigen GUI-Schnittstelle.
  4. Profitieren.

Aber ehrlich gesagt, ich schlage vor, dass Sie einen Blick auf die Perl GTK2 Bindung, es ist genial, einschließlich Features wie die Umsetzung einer Gtk-Klasse ganz in Perl und verwenden Sie es als Argument für eine Funktion in C geschrieben – zum Beispiel können Sie eine schreiben Modellklasse für einen gtk Baum ganz in Perl.

Ich würde Zwischengespräche vermeiden, wenn möglich; Zerbrechlichkeit und massive Erhöhungen in Abhängigkeiten erwarten Sie auf dieser Straße. Allerdings gibt es …

Inline :: Python

Wenn Python verwendet werden muss, wurde die Inline::* Reihe von Modulen allgemein gut angenommen. Damit können Sie Python in einem Perl-Skript schreiben. Du musst immer noch Perl schreiben, aber es würde dir erlauben, Python-Bibliotheken in Perl-Skripten zu benutzen. Es wird die Dinge schwieriger zu debuggen, obwohl.

Ich denke, das Hauptkriterium für jede qualifizierte Antwort würde die Details der vorhandenen Codebasis beinhalten. Wie wird dieser Perl-Code genannt und wie gibt es seine Ergebnisse zurück?

Eine Sammlung von Kommandozeilen-Dienstprogrammen, die Ergebnisse durch eine vernünftig gute Textausgabe zurückgeben ("gut" wie in "zugänglich für weitere Maschinenparsen" oder "Pipeline freundlich") … sollte vernünftigerweise leicht von jeder Programmiersprache (und Pythons exzellenter subprocess aufgerufen werden Und multiprocessing Module). Eine Sammlung von Web-CGI oder anderen Modulen, die zwischen Apache und einem DBMS-System überlagert sind, konnte immer noch mit Sachen wie urlopen2 oder mechanize urlopen2 – aber es könnte besser sein, den Perl-Code zu umgehen und Python zu schreiben, um das zugrunde liegende (vermutlich kanonische) Modell ( Datenspeicher).

Wenn die Mehrheit der Codebasis ein Satz von Bibliotheken oder Modulen ist … und die Funktionalität, die Ihr vorgeschlagenes Dashboard benötigt, ist nicht bereits über einen höheren Level-Mechanismus (einige Kommandozeilen-Schnittstelle, Netzwerk-Protokoll, etc.) ausgesetzt … dann ist es Grundsätzlich verrückt, um die Anbindung an sie durch jede andere Sprache als Perl zu betrachten. (Es sei denn, durch eine merkwürdige und äußerst unwahrscheinliche Schicksalsspitze sind deine vorhandene Codebasis und dein beabsichtigtes Implementierungsziel beide bereits unter Parrot stabil).

Lassen Sie uns eine andere, breitere Frage stellen: Welche Schnittstelle für Sie beabsichtigen, zwischen Ihrem Dashboard und Ihrer vorhandenen Codebasis zu verwenden?

Diese Frage ist unabhängig von Ihrer Wahl der Implementierungssprache. Wenn du das Dashboard in Perl schreibst, muss es doch irgendwie in deiner vorhandenen Codebasis aufrufen. Sie müssen wahrscheinlich Ihre Code-Basis zu reparieren, um Unterstützung für was auch immer Sie für Ihr Dashboard verwenden zu implementieren. An der Stelle, wo Ihre Codebase die notwendige API unterstützt (hat Kommandozeilen- oder IPC-Protokollaufrufe in die gewünschte Funktionalität, die Ergebnisse über einen vernünftigen IPC-Mechanismus zurückgibt) … dann ist deine Wahl der Dashboard-Implementierungssprache im Wesentlichen willkürlich.

Interessantes Projekt: Ich würde mich für eine lose-Kopplung entscheiden und einen XML-RPC- oder JSON-basierten Ansatz betrachten.

  • Hinzufügen einer Leerzeile zwischen nicht verknüpften Dateneinträgen
  • Präsentationen beim Umschalten von Perl zu Python
  • Trennen Sie eine Reihe von Strings in einzelne Zeilen
  • Parse SVN Log Geänderter Pfad für Paketnamen
  • Suchen der Module, bei denen Änderungen mit svn überprüft wurden
  • Ist es möglich, dass etwas wie lvalue von perl oder setf von lisp in python?
  • Mehrstufiges Wörterbuch in Python
  • Dynamische Namensprozesse
  • Zufällige Auswahl von Zeilen aus Dateien
  • Verknüpfung von Sprachen
  • Aufruf eines Python-Moduls aus Perl
  • Python ist die beste Programmiersprache der Welt.