调用方法:
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