Как Вы вызываете сценарий Python в файле банки с помощью Python?

Я работаю над приложением, которое вкрапляет набор кода 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

7
задан Trevor 31 March 2010 в 07:56
поделиться

1 ответ

у меня работает следующее :

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)
  1. Загрузка скрипта из ClassPath как строки в 'script'
  2. выполнение скрипта с помощью exec
5
ответ дан 7 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: