2010-08-09 16 views
7

Ho creato un modulo in Python che fornisce circa una dozzina di funzionalità. Anche se verrà utilizzato principalmente da Python, c'è una buona parte degli utenti legacy che lo chiameranno da Perl.Chiamare un modulo Python da Perl

Qual è il modo migliore per effettuare una connessione a questo modulo? I miei pensieri sono:

  1. offrire le funzionalità come utilità della riga di comando e fare chiamate system
  2. creare una sorta di server e gestire le chiamate RPC (ad esempio, tramite JSON RPC)

Qualsiasi consiglio?

risposta

19

Un'altra scelta è quella di inline Python direttamente nello script Perl, utilizzando Inline::Python.

Questo può essere più semplice di altre soluzioni e richiede solo un modulo aggiuntivo.

+0

Inline :: Python funziona abbastanza bene, non ci può essere un po 'estraneo quando si superano certi tipi di variabili. – GWW

+0

Grazie. Mi sono piaciute tutte le risposte, ma questo sembra molto portabile. – Escualo

3

offrire le funzionalità come utilità della riga di comando e fare chiamate di sistema

funziona davvero bene. Questo è il modo in cui programmi come Python (e Perl) sono pensati per essere usati.

+0

Difficile da battere semplice e ben testato, non è vero? – dawg

+5

Tranne, naturalmente, se devono essere eseguiti in un ambiente in cui il costo di avvio di un interprete Python (numero di ore di esecuzioni previste) è troppo alto. Come un'app o un server web, ad esempio. Il modo in cui Perl è pensato per essere usato in un modo appropriato alla situazione. – DVK

+1

@DVK: Python può essere utilizzato in una varietà di modi, anche, ciascuno appropriato per diverse situazioni. Sai quale situazione si applica a questa domanda? –

9

Nel breve periodo la soluzione più semplice è utilizzare Inline :: Python. Seguito da vicino uno script da riga di comando.

A lungo termine, l'utilizzo di un server per fornire funzionalità RPC o semplicemente la chiamata di uno script da riga di comando ti fornirà la soluzione più a prova di futuro.

Perché?

In questo modo non sei legato a Perl o Python come linguaggio utilizzato per costruire i sistemi che consumano i servizi forniti dalla tua libreria. Entrambi i metodi creano un'interfaccia chiara e indipendente dal linguaggio che è possibile utilizzare con qualsiasi ambiente di sviluppo adottato.

A seconda delle esigenze, una qualsiasi delle opzioni presentate potrebbe essere la "scelta migliore". A seconda di come le tue esigenze evolvono nel tempo, una scelta diversa può essere rivelata come "migliore".

mio approccio a questa potrebbe essere quella di chiedere un paio di domande:

Quanto spesso si fa a cambiare gli strumenti di sviluppo. Sei passato a Python da Perl. Hai iniziato con Tcl e vai in Perl? Passerai alla nuova eccitante lingua X in 1, 5 o 10 anni? Se cambi gli strumenti "spesso" (qualunque cosa ciò significhi), enfatizza la compatibilità degli strumenti incrociati.

Quanto è veloce abbastanza veloce? L'ora di avvio delle soluzioni a riga di comando è ok? Inline :: Python rallenta troppo (stai ancora inizializzando un interprete Python, è semplicemente incorporato nell'interprete Perl)?

In base alle risposte a queste domande, vorrei fare la cosa più semplice che è probabile che funzioni.

La mia ipotesi è che significa, in ordine:

  1. Inline :: Python
  2. script della riga di comando
  3. costruire un server RPC