• [DEBUG] java中用Runtime调用python 简单程序输出null


    今天需要在java中调用python脚本,首先考虑的是java自带的Runtime

    在ubuntu和win10下分别测试,发现win10报错

    java源代码

    @Test
    	public void testRuntime() throws InterruptedException {
            Scanner input = new Scanner(System.in);
            
            // 在同一行输入两个数字,用空格分开,作为传入Python代码的命令行参数
            System.out.println("Enter two integers(e.g. 12 34): ");
            String integers = input.nextLine();
            String[] numbers = integers.split(" ");
            
            // 定义传入Python脚本的命令行参数,将参数放入字符串数组里
            String cmds = String.format("python F:\eclipse\springboot2\demo\src\test\java\com\example\demo\cal.py %s %s", numbers[0], numbers[1]);
    
            // 执行CMD命令
            System.out.println("
    Executing python script file now.");
            Process pcs;
    		try {
    			pcs = Runtime.getRuntime().exec(cmds);
    			pcs.waitFor();
    
    	        // 定义Python脚本的返回值
    	        String result = null;
    	        // 获取CMD的返回流
    	        BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());
    	        // 字符流转换字节流
    	        BufferedReader br = new BufferedReader(new InputStreamReader(in));
    	        // 这里也可以输出文本日志
    
    	        String lineStr = null;
    	        while ((lineStr = br.readLine()) != null) {
    	            result = lineStr;
    	        }
    	        // 关闭输入流
    	        br.close();
    	        in.close();
    
    	        System.out.println(result);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
            
    	}
    

    python源代码

    #coding=utf-8
    from sys import argv
    
    num1 = argv[1]
    num2 = argv[2]
    sum = int(num1) + int(num2)
    print sum

    ubuntu下正确输出

     报错原因:

    win10我装的是python3,ubuntu下是python2,所以python2支持的格式,在python3下是不行的:)

    修改cal.py

    print(sum)

    这样就可以兼容Python2和3了。修改之后正确输出

  • 相关阅读:
    从零开始写STL—哈希表
    从零开始写STL-string类型
    从零开始写STL—模板元编程之any
    从零开始写STL—模板元编程之tuple
    c++ 实现 key-value缓存数据结构
    从零开始写STL
    从零开始写STL—functional
    从零开始写STL—set/map
    从零开始写STL-二叉搜索树
    洛谷 P4016 负载平衡问题
  • 原文地址:https://www.cnblogs.com/pxy7896/p/11531822.html
Copyright © 2020-2023  润新知