1. 在命令行中调
TestCallPython.java
package com.brown;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestCallPython {
public static void main(String[] args) {
try {
int number1 = 10;
int number2 = 32;
ProcessBuilder processBuilder = new ProcessBuilder("python", "C:/test.py", "" + number1, "" + number2);
Process progress = processBuilder.start();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(progress.getInputStream()));
int result = new Integer(bufferedReader.readLine()).intValue();
System.out.println("value is : " + result);
} catch (Exception e) {
// TODO: handle exception
}
}
}
C:\test.py
import sys
print(int(sys.argv[1])+int(sys.argv[2]))
注意:
这种方式只能接收到python里print的数据。所以如果你需要返回值,可以把返回值打印出来;可能返回值里面有日志等你不需要的数据,你只需把你需要的返回值放在print结果的最后一行,然后读取最后一行。下面是读取返回值(最后一行)的代码:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(progress.getInputStream()));
Stream<String> stream = bufferedReader.lines();
List<Object> lines = stream.collect(Collectors.toList());
String result = lines.get(lines.size()-1).toString();
2. 使用Jython
http://blog.youkuaiyun.com/xingjiarong/article/details/49424253