首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ScriptEngine在Java中运行Python?

如何使用ScriptEngine在Java中运行Python?
EN

Stack Overflow用户
提问于 2022-08-30 09:55:21
回答 2查看 47关注 0票数 0

我正在使用Jyton/ScriptEngine在我的Java应用程序中运行Python脚本,但它不起作用。ScriptEngine找不到JythonScriptEngine。

代码语言:javascript
运行
复制
public static void main(String[] Args) throws FileNotFoundException, ScriptException {
    PySystemState engineSys = new PySystemState();
    engineSys.path.append(Py.newString("C:/Users/User/AppData/Local/jython2.7.2/jython.jar"));
    Py.setSystemState(engineSys);
    StringWriter writer = new StringWriter();
    ScriptContext context = new SimpleScriptContext();
    context.setWriter(writer);
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("python");
    engine.eval(new FileReader("C:/*/MyScript.py"), context);
    System.out.println(engine.get("value"));}

我将Jython添加到我的Libary项目中。

但它不起作用。

我希望有人能帮我。提前谢谢你。:D

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-30 10:48:51

我没有使用Jython库,但它似乎有助于在java代码中获得python库/解释器。您的代码看起来像是要执行一些python类并在Java中获得结果。您只需将其作为shell命令执行,并获得其结果,如下实用程序函数所示:

代码语言:javascript
运行
复制
public static String runSystemCommand(String fileToRun) throws IOException
    {
        Process p = Runtime.getRuntime().exec(fileToRun);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String result = input.lines().collect(Collectors.joining("\n"));

        input.close();

        return result;
    }

    public static void main(String[] args) throws Exception
    {
        System.out.println(runSystemCommand("python /home/saad/shell.py"));
    }
票数 0
EN

Stack Overflow用户

发布于 2022-08-30 17:05:51

我找到了一个使用ProcessBuilder的解决方案。它在shell中运行我的python脚本,就像@saadeez向我展示的那样。

代码语言:javascript
运行
复制
@Test
  public void givenPythonScript_whenPythonProcessInvoked_thenSuccess() throws Exception {
  ProcessBuilder processBuilder = new ProcessBuilder("python", "C:.py");
  processBuilder.redirectErrorStream(true);

  Process process = processBuilder.start();
  List<String> results = readProcessOutput(process.getInputStream());
  System.out.println(results);
  int exitCode = process.waitFor();
  assertEquals("0", ""+exitCode);}


public static String runSystemCommand(String fileToRun) throws IOException
{
    Process p = Runtime.getRuntime().exec(fileToRun);
    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

    String result = input.lines().collect(Collectors.joining("\n"));

    input.close();

    return result;}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73540502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档