Я работаю над приложением, которое вкрапляет набор кода Java и jython. Из-за природы программы (использующий wsadmin) мы действительно ограничиваемся Python 2.1
У нас в настоящее время есть банка, содержащая и источник Java и .py модули. Код в настоящее время вызывается с помощью Java, но я хотел бы удалить это в пользу миграции как можно большей функциональности к jython.
Проблема, которую я имею, состоит в том, что я хочу или импортировать или выполнить модули Python в существующем файле банки от вызова jython сценарий. Я попробовал несколько различных путей без успеха.
Моя структура каталогов похожа:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
1-й подход, который я попробовал, должен был сделать импорт от банки. Я добавил банку к своему sys.path и попытался импортировать модуль с помощью и импорта com.example.action.myAction и импортировать myAction. Никакой успех однако, даже когда я поместил init.py файлы в каталог на каждом уровне.
2-й подход, который я попробовал, должен был загрузить ресурс с помощью класса Java. Таким образом, я записал ниже кода:
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"
Оба из них перестали работать. Я в чем-то вроде потери теперь относительно того, как я должен продолжить двигаться. Какие-либо идеи?
удачи,
Trevor
у меня работает следующее :
import sys
import os
import java.lang.ClassLoader
import java.io.InputStreamReader
import java.io.BufferedReader
loader = java.lang.ClassLoader.getSystemClassLoader()
stream = loader.getResourceAsStream("com/example/action/myAction.py")
reader = java.io.BufferedReader(java.io.InputStreamReader(stream))
script = ""
line = reader.readLine()
while (line != None) :
script += line + "\n"
line = reader.readLine()
exec(script)