Tag: jython

在Jython中设置导入模块路径 – 奇怪的行为

我正在构建Java到Jython桥类。 我正在尝试解决的任务是让Jython在我的应用程序工作目录(也称为程序执行目录)中查找python模块。 我是通过将System.getProperty(“user.dir”)值附加到sys.path来实现的: pySysState = new PySystemState(); //add working directory into sys.path pySysState.path.append(new PyString(System.getProperty(“user.dir”))); log_.info(“Jython sys state initialized. sys.path: ” + this.pySysState.path); 我得到ImportErrorexception: python module ‘user_module’ was not found. sys.path: [‘\\Lib’, ‘//Lib’, ‘__classpath__’, ‘__pyclasspath__/’, ‘C:\\Users\\vvlad\\IDEAProjects\\transform’] ImportError: No module named scheduled_helper at org.python.core.Py.ImportError(Py.java:290) at org.python.core.imp.import_first(imp.java:750) at org.python.core.imp.import_name(imp.java:834) … 其中C:\\Users\\vvlad\\IDEAProjects\\transform是应用程序目录。 在sys.path看起来像这样: 当我在Jython注册表python.path变量中手动指定工作目录的完整路径时,导入工作正常。 sys.path看起来不同: >>sys.path: [‘C:\\Users\\vvlad\\IDEAProjects\\transform’, ‘\\Lib’, ‘//jython-2.5.2.jar/Lib’, […]

Java:用于嵌入Java桌面应用程序的脚本语言(宏)

我正在用Java编写图形应用程序。 最终我想用脚本语言构建,所以事情是可编程的。 你推荐哪种语言库? 可能的嫌疑人是: 犀牛 (JavaScript) JRuby (Ruby) Jython (Python) 不太可能的候选人是: 使用JavaCC掀起我自己的语言 LuaJava (Lua) Groovy的 JavaFX的 脚本富 目标受众可能不是硬核程序员,因此不太喜欢使用较为神秘的语言。 我的猜测是JavaScript更容易被他们接受,即使它的怪癖只是因为他们已经看到了更多。 Lua似乎在C / C ++中很受欢迎,但至少LuaJava需要额外的.dll / .so,这使部署变得复杂。 编辑: PhiLho写道,有一个叫做kahlua的Lua的Java实现。 相关问题: 在现有代码库中支持哪种脚本语言? (在C / C ++中) 将脚本function添加到.net应用程序 什么是嵌入C#桌面应用程序的最佳脚本语言。

Java脚本安全(JRuby,Jython,Groovy,BeanShell等)

我正在寻找运行一些未经validation的脚本(用一种尚未确定的语言编写,但需要基于Java,所以JRuby,Groovy,Jython,BeanShell等都是候选者)。 我希望这些脚本能够做一些事情并限制做其他事情。 通常,我只是使用Java的SecurityManager并完成它。 这非常简单,让我限制文件和网络访问,关闭JVM的能力等等。这对我想要阻止的高级别东西很有用。 但是我想要允许一些东西,但只能通过我提供的自定义API /库。 例如,我不想允许直接网络访问打开到yahoo.com的URLConnection,但如果使用MyURLConnection完成,我没关系。 那就是 – 我想要允许的一组方法/类,然后我想要的其他一切不受限制。 我不相信这种类型的安全性可以使用标准的Java安全模型来完成,但也许它可以。 我对脚本语言本身的性能或灵活性没有特定要求(脚本将通过基本循环/分支对我的API进行简单的过程调用)。 因此,即使是一个“大”的开销来检查每次reflection调用的安全检查也没问题。 建议?

如何使用jython将参数传递给java中的python脚本

我试图使用jython在java中执行我的python脚本。 重要的是我需要使用jython将命令行参数传递给我的脚本,例如myscript.py arg1 arg2 arg3。 这里有一个类似的问题: 在Java中将参数传递给Python脚本 没有完全回答(没有一个解决方案有效)。 我的代码现在看起来像这样: String[] arguments = {“arg1”, “arg2”, “arg3”}; PythonInterpreter.initialize(props, System.getProperties(), arguments); org.python.util.PythonInterpreter python = new org.python.util.PythonInterpreter(); StringWriter out = new StringWriter(); python.setOut(out); python.execfile(“myscript.py”); String outputStr = out.toString(); System.out.println(outputStr); 但是,这似乎没有传递给python脚本的任何参数。 有任何建议如何正确吗? 它必须简单,但我在网上找不到任何文档。 我使用的是python 2.7和jython 2.7.0。

使用jython调用nltk库时出现问题

我试图调用集成在我的python代码中的nltk库。 根据要求,我需要通过我的java代码调用它们,因此,我使用Jython进行集成。 如果我的pyhton代码不包含任何nltk库,在这种情况下它可以正常工作。 但是当它包含nltk库时,它会给我导入错误。 我已经为解释器添加了nltk相关的系统路径 PySystemState sys = Py.getSystemState(); sys.path.append(new PyString(“c:\\Python27\\Lib”)); sys.path.append(new PyString(“c:\\Python27\\Lib\\site-packages”)); sys.path.append(new PyString(“C:\\Python27\\DLLs”)); sys.path.append(new PyString(“C:\\Python27\\Lib\\lib-tk”)); sys.path.append(new PyString(“C:\\Python27”)); sys.path.append(new PyString(“C:\\Python27\\libs”)); 我在执行我的java代码时遇到了以下错误 console: Failed to install ”: java.nio.charset.UnsupportedCharsetException: cp0. Exception in thread “MainThread” Traceback (most recent call last): File “tokenextractor.py”, line 7, in import nltk File “c:\Python27\Lib\site-packages\nltk\__init__.py”, line 137, in from nltk.stem import * File […]

如何检查Jython ScriptEngine查找python模块的类路径?

我有这个Java代码,我用它来运行使用Jython ScriptEngine的python script : StringWriter writer = new StringWriter(); ScriptEngineManager manager = new ScriptEngineManager(); ScriptContext context = new SimpleScriptContext(); context.setWriter(writer); ScriptEngine engine = manager.getEngineByName(“python”); engine.eval(new FileReader(“/Users/folder1/test.py”), context); 在我的python script有几个模块import语句,当我运行Java代码时,我得到错误为javax.script.ScriptException: ImportError: No module named psycopg2 。 所有模块都安装在我的机器上,当我通过CLI正常运行python script它会执行。 所以我的理解是Jython classpath正在寻找python模块的其他地方。 我如何检查Jython ScriptEngine在哪里查找模块然后修改它包括我的python模块实际存在的位置? 我是新手,所以请原谅任何缺乏理解。 注意:我的机器上安装了CentOS和python 2.7.5

来自Java的CPython?

我需要从Java调用CPython代码。 有哪些工具/ API /库可以帮助我做到这一点? Jython不是一个选项,因为Python代码严重依赖于numpy 。 编辑1: main()函数应该是Java,而不是Python(即我需要将CPython嵌入到Java中,反之亦然。) 编辑2:我还应该提一下,我将在Java和Python之间传递大型数值数组,因此将两者放在同一个进程空间中的解决方案更可取(但不是强制性的)。

你如何使用python在jar文件中调用python脚本?

我正在开发一个散布一堆jython和java代码的应用程序。 由于程序的性质(使用wsadmin),我们实际上仅限于Python 2.1 我们目前有一个包含java源代码和.py模块的jar。 目前使用java调用代码,但我想删除它,以便尽可能多地将function迁移到jython。 我遇到的问题是我想从调用jython脚本导入或执行现有jar文件中的python模块。 我尝试了几种不同的方法但没有成功。 我的目录结构如下: application.jar |– com |–example |– action |– MyAction.class |– pre_myAction.py 我尝试的第一种方法是从jar子里import。 我将jar添加到我的sys.path并尝试使用import com.example.action.myAction 导入模块并导入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” […]

如何从java类调用python方法?

我在Java项目中使用Jython。 我有一个Java类: myJavaClass.java和一个Python类: myPythonClass.py public class myJavaClass{ public String myMethod() { PythonInterpreter interpreter = new PythonInterpreter(); //Code to write } } Python文件如下: class myPythonClass: def abc(self): print “calling abc” tmpb = {} tmpb = {‘status’ : ‘SUCCESS’} return tmpb 现在问题是我想从我的Java文件的myMethod方法调用我的Python文件的abc()方法并打印结果。

使用java运行jython字节码

看起来我错过了一些东西。 当使用Jython在Java中运行我的Python代码时,会生成Java字节码文件(test.py – > test@py.class)。 我可以直接使用java运行这些类吗? 换句话说,我想这样做: $ java test@py [additional cp args] 工作。 目的:编写Python代码而不必放弃源代码。