2010-08-09 20 views
7

Creé un módulo en Python que proporciona aproximadamente una docena de funcionalidades. Si bien se usará principalmente desde Python, hay una buena fracción de usuarios heredados que lo llamarán desde Perl.Llamar a un módulo de Python desde Perl

¿Cuál es la mejor manera de conectar un módulo a este módulo? Mis pensamientos son:

  1. ofrecer las funcionalidades como las utilidades de línea de comandos y crea system llamadas
  2. crear algún tipo de servidor y gestionar las llamadas RPC (por ejemplo, a través de JSON RPC)

Algún consejo?

Respuesta

19

Otra opción es insertar Python directamente en su script de Perl, usando Inline::Python.

Esto puede ser más simple que otras soluciones, y solo requiere un módulo adicional.

+0

Inline :: Python funciona bastante bien, no puede sin embargo, será algo extraño cuando se pasen ciertos tipos de variables. – GWW

+0

Gracias. Me gustaron todas las respuestas, pero esto parece muy portátil. – Escualo

3

ofrecer las funcionalidades como las utilidades de línea de comandos y crea sistema llama

funciona muy bien. Esta es la forma en que se usan los programas como Python (y Perl).

+0

Difícil de superar, simple y bien probado, ¿no? – dawg

+5

Excepto por supuesto, si necesitan ejecutarse en un entorno donde el costo de inicio de un intérprete de Python (tiempos # de ejecuciones esperadas) es demasiado alto. Como una aplicación o un servidor web, como un ejemplo. La forma en que Perl debe usarse de una manera apropiada a la situación. – DVK

+1

@DVK: Python se puede usar de varias maneras, también, cada una apropiada para diferentes situaciones. ¿Sabes qué situación se aplica a esta pregunta? –

9

En el corto plazo, la solución más fácil es usar Inline :: Python. Seguido de cerca llamando a un script de línea de comandos.

A largo plazo, usar un servidor para proporcionar funcionalidad RPC o simplemente llamar a un script de línea de comandos le dará la solución más a prueba de futuro.

¿Por qué?

Porque de esa manera no está vinculado a Perl o Python como el lenguaje utilizado para construir los sistemas que consumen los servicios proporcionados por su biblioteca. Cualquiera de los dos métodos crea una interfaz clara e independiente del idioma que puede usar con cualquier entorno de desarrollo que adopte.

Según sus necesidades, cualquiera de las opciones presentadas puede ser la "mejor opción". Dependiendo de cómo evolucionen sus necesidades con el tiempo, una opción diferente puede revelarse como "mejor".

Mi acercamiento a esto sería que pedir un par de preguntas:

¿Con qué frecuencia cambian las herramientas de desarrollo. Has cambiado a Python desde Perl. ¿Comenzó con Tcl y fue a Perl? ¿Vas a cambiar al nuevo y fascinante lenguaje X en 1, 5 o 10 años? Si cambia las herramientas 'a menudo' (lo que sea que eso signifique) enfatice la compatibilidad de herramientas cruzadas.

¿Qué tan rápido es lo suficientemente rápido? ¿Está bien el tiempo de inicio de las soluciones de línea de comandos? Inline :: Python ralentiza demasiado las cosas (¿todavía estás inicializando un intérprete de Python, está solo integrado en tu intérprete de Perl)?

Basándome en las respuestas a estas preguntas, quisiera hacer lo más simple que pueda funcionar.

Mi conjetura es que eso significa en este orden:

  1. Inline :: Python
  2. scripts de línea de comandos
  3. Construir un servidor RPC
Cuestiones relacionadas