我使用以下代码从Java class
中执行python script
:
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.SimpleScriptContext;
StringWriter writer = new StringWriter();
ScriptEngineManager manager = new ScriptEngineManager();
ScriptContext context = new SimpleScriptContext();
context.setWriter(writer);
ScriptEngine engine = manager.getEngineByName("python");
engine.eval(new FileReader("test.py"), context);
我想知道如何用上述方法调用test.py
内的函数,并将一些参数传递给该函数?
注意:我知道执行python script
的更好方法是使用Process
,但由于系统要求,我不想使用Process
方法,因为它每次执行都会产生一个新的进程。在
你需要稍微改变它来调用一个函数。在
基本上,Jython引擎(我假设您正在使用它编写python脚本)允许您使用它的} 。这意味着您可以使用它来调用函数,前提是您与运行的脚本处于同一“作用域”。这是通过在引擎中设置上下文来实现的,而不是将其作为参数传递给
ScriptEngine
作为^{eval
。在注意:在您的问题中,您说您知道在单独的进程中运行python可能会更好。这不一定是真的。例如,从中调用一个函数(并获取它的返回值!)如果你从另一个进程运行它会困难得多。脚本扩展允许您这样做。在
另一个选择是直接使用Jython,而不是通过标准的Java脚本平台。但我没有足够的知识来扩展。在
相关问题 更多 >
编程相关推荐