zoukankan      html  css  js  c++  java
  • 使用Java执行python代码并得到结果

    由于一些功能用python代码实现会更加方便(python有那么多实用的库真的香),所以可以用python实现部分代码并通过java来调用执行。

    python代码文件 test.py

    import time
    
    for i in xrange(1,10):
    	print("process: " + str(i))
    	time.sleep(2)
    
    print("Finish.........")
    

    加入time.sleep(2)让python的输出有停顿间隔性。主要是为了验证java执行python代码的时候是异步执行还是同步执行,说白了就是为了验证java调用python的时候是不是只是取得一瞬间的输出,或者验证当python执行比较慢的时候,java代码流程是否会等待python代码执行完成。

    java代码文件 ExecutePy.java

    原理就是在命令行中输入python test.py来执行python的代码,并读取控制台中python文件的输出。
    Java中通过Runtime.getRuntime()得到当前JVM虚拟机执行的环境。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class ExecutePy
    {
    	public static void main(String[] args) {
    		try {
    			String exe = "python";
    			String command = "/Users/jinchengll/Documents/temp/test.py";
    			String[] cmdArr = new String[] { exe, command };
    			Process process = Runtime.getRuntime().exec(cmdArr);
    			BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
    			String line;
    			while( ( line = in.readLine() ) != null ) {
    				System.out.println(line);
    			}
    			in.close();
    			int result = process.waitFor();
    			System.out.println("执行结果:" + result);
    		} catch (IOException | InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    结果

    jinchengll temp $java ExecutePy 
    process: 1
    process: 2
    process: 3
    process: 4
    process: 5
    process: 6
    process: 7
    process: 8
    process: 9
    Finish.........
    执行结果:0
    

    总结

    通过以上方法可以使用Java调用python代码并获得输出,但是存在一个问题是Java获取python的输出并不是马上就能获取到,需要等python代码全部执行完了,Java才会开始读取python的输出并输出到Java的控制台上。

  • 相关阅读:
    加入页面切换动画, 避免冷启动
    Spark Shuffle模块——Suffle Read过程分析
    java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求
    二叉排序树(BST)构造与应用
    L贪心基础
    leetcode笔记:Ugly Number II
    Android API Guides---Layouts
    红外目标图像中阈值切割方法的比較与研究
    IOS开发证书变成“此证书的签发者无效”解决方法
    Web前端开发规范收集
  • 原文地址:https://www.cnblogs.com/jinchengll/p/12594749.html
Copyright © 2011-2022 走看看