zoukankan      html  css  js  c++  java
  • java里面嵌套执行python脚本

    方法一:通过RunTime.getRuntime().exec(shellScript)

        //方式1 不带参数
           String classpath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
            String shellScript = null;
            if (System.getProperties().getProperty("os.name").toLowerCase().indexOf("windows") != -1){
                shellScript = String.format("python template.py", classpath.substring(1));
            }else {
                shellScript = String.format("python3 template.py", classpath.substring(1),classpath);
            }
            Runtime rt = Runtime.getRuntime();
            
    
          
    
        //方式2 带参数
    
            String command = "D:\calculator_simple.py"; 
            String num1 = "1"; 
            String num2 = "2"; 
            String[] cmdArr = new String[] {exe, command, num1, num2}; 
            Process process = Runtime.getRuntime().exec(cmdArr); 
            InputStream is = process.getInputStream(); 
            DataInputStream dis = new DataInputStream(is); 
            String str = dis.readLine(); 
            process.waitFor(); 
            System.out.println(str); //此处输出3
    
            #calculator_simple.py脚本
            # coding=utf-8
            from sys import argv
            num1 = argv[1]
            num2 = argv[2]
            sum = int(num1) + int(num2)
            print sum        

    方法2:通过Jython调用,这种方式不太推荐,记得调用selenium的库会报No module found,可是明明引用了,而且java社区不太喜欢这种强耦合的方式调用Python,所以官网也不怎么更新了,在微服务架构大行其道的今天,这种程序间嵌套调用的方式将会逐渐被淘汰

        String python = "D:\simple_python.py";
        PythonInterpreter interp = new PythonInterpreter();
        interp.execfile(python);
    //方式1 不带参数
    String command = "D:\calculator_simple.py"; 
    String num1 = "1";
    String num2 = "2";
    String[] cmdArr = new String[] {exe, command, num1, num2};
    Process process = Runtime.getRuntime().exec(cmdArr);
    InputStream is = process.getInputStream();
    DataInputStream dis = new DataInputStream(is);
    String str = dis.readLine();
    process.waitFor();
    System.out.println(str);
  • 相关阅读:
    [网页基础]DIV+CSS学习笔记(一)CSS的引入及选择器基础
    [网页基础]CSS+DIV布局,简单布局例子
    [C#]结构体和类的区别
    [网页基础]DIV+CSS学习笔记(二)深入理解盒子模型
    [数据库]mysql存储过程的建立及使用
    [网页基础]DIV+CSS学习笔记(三)盒子的定位与浮动
    [C#]List的Sort()、Find()、FindAll()、Exist()的使用方法举例
    Java实现断点续传和原理
    Minio的Docker部署dockercompose启动流程
    ShardingJDBC
  • 原文地址:https://www.cnblogs.com/feibazhf/p/14337603.html
Copyright © 2011-2022 走看看