我正在开发一个散布一堆jython和java代码的应用程序。由于程序的性质(使用wsadmin),我们实际上仅限于Python 2.1
我们目前有一个包含java源和.py模块的jar。该代码目前使用java调用,但我想删除它,以支持尽可能多的功能迁移到jython。
我遇到的问题是我想从调用jython脚本导入或执行现有jar文件中的python模块。我尝试了几种不同的方法但没有成功。
我的目录结构如下:
application.jar
|-- com
|--example
|-- action
|-- MyAction.class
|-- pre_myAction.py
我尝试的第一种方法是从罐子里进口。我将jar添加到我的sys.path并尝试使用 import com.example.action.myAction 和 import myAction 导入模块。但是,即使我将 init .py文件放入每个级别的目录中也没有成功。
我尝试的第二种方法是使用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"
这两个都失败了。关于我该如何继续,我现在有点不知所措。有什么想法吗?
欢呼声,
特雷弗
答案 0 :(得分:5)
以下内容适用于我:
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)