Estoy trabajando en una aplicación que intercala un montón de código jython y java. Debido a la naturaleza del programa (usando wsadmin) estamos realmente restringidos a Python 2.1¿Cómo se invoca una secuencia de comandos python dentro de un archivo jar utilizando Python?
Actualmente tenemos un contenedor que contiene ambos módulos java source y .py. El código se invoca actualmente usando java, pero me gustaría eliminar esto a favor de migrar la mayor funcionalidad posible a jython.
El problema que tengo es que quiero importar o ejecutar módulos de python dentro del archivo jar existente desde una secuencia de comandos jython de llamada. Intenté un par de formas diferentes sin éxito.
Mi estructura de directorios se parece a:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
La primera aproximación que intenté fue hacer las importaciones de la jarra. Agregué el jar a mi sys.path e intenté importar el módulo usando import com.example.action.myAction y import myAction. Sin embargo, no tuve éxito, incluso cuando puse init .py archivos en el directorio en cada nivel.
El segundo método que probé fue cargar el recurso usando la clase java. Así que escribí el siguiente código:
import sys
import os
import com.example.action.MyAction as MyAction
scriptName = str(MyAction.getResource('/com/example/action/myAction.py'))
scriptStr = MyAction.getResourceAsStream('/com/example/action/myAction.py')
try:
print execfile(scriptStr)
except:
print "failed 1"
try:
print execfile(scriptName)
except:
print "failed 2"
Ambos fallaron. Ahora estoy un poco perdido en cuanto a cómo debo proceder. Algunas ideas ?
aplausos,
Trevor
cuáles son el contenido de 'scriptName' y' scriptStr'? – badp
En el archivo jar. Está en el classpath cuando invoco a jython. Si imprimo sys.path lo ves allí. Para ser minucioso, intenté agregar el jar directamente al código usando sys.path.append() pero no hizo ninguna diferencia. – Trevor
Mira 'zipimport' (http://docs.python.org/library/zipimport.html) y en el ejemplo en la parte inferior. Cuando escribes 'init.py', quieres decir' __init __. Py', ¿verdad? –