java中怎么调用python 脚本

时间:2021-11-08 08:59:26

调用方法:

import java.io.BufferedReader;
import java.io.InputStreamReader; public class PythonInvoke {
public static void invokePy(String[] args) { try {
Process process = Runtime.getRuntime().exec(args);
//防止Python输出中文时乱码
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
//java代码中的process.waitFor()返回值为0表示我们调用python脚本成功,
//返回值为1表示调用python脚本失败,这和我们通常意义上见到的0与1定义正好相反
int re = process.waitFor();
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}
}
}

测试 Test():

import com.cargosmart.alarm.utils.PythonInvoke;

public class Test {

    public static void main(String[] args) {
String []para = new String[] {"python", "D://hello.py"};
PythonInvoke.invokePy(para); System.out.println("-----有参------");
String[] arguments = new String[] {"python", "D://hello1.py","lei","23"};
PythonInvoke.invokePy(arguments); } }

python文件

  hello.py

def hello():
print('Hello,Python') if __name__ == '__main__':
hello()

 hello1.py

import sys

def hello(name,age):
print('name:'+name)
print('age:'+age) if __name__ == '__main__':
hello(sys.argv[1], sys.argv[2])

控制台结果:

Hello,Python
0
-----有参------
name:lei
age:23
0