在网上看了很多方法,本来想用jython的,但是看到网友说他2015之后就不更新了,且不支持Python第三方库,直接放弃!
然后选了最传统的Runtime.getRuntime().exec,但是一直不成功...
看了好多解决方法,连bat文件换默认python都试了,还是输出1,气死个人...
System.out.println(pr.exitValue()); // 0-成功 1-调用失败 2-Python文件执行失败
最后!!!
偶然在一篇博客中看到说python文件不可以包含中文,注释也不行...
然后就成了....
java文件
public class TestApplication {
public static void main(String[] args) {
//SpringApplication.run(TestApplication.class, args);
try {
//需传入的参数
String a = "123";
System.out.println("start");
//设置命令行传入参数
String[] str = new String[] { "python", "你的文件路径\\guro.py", a};
Process pr = Runtime.getRuntime().exec(str);
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println(pr.exitValue());
System.out.println("end");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
python文件
import sys
if __name__ == '__main__':
print("sucess")
for i in range(1, len(sys.argv)):
print("参数", i, sys.argv[i])
输出:(我看出来了 他是真的不喜欢中文...)
————————————————分割线——————————————————————
因为我的python文件涉及了很多第三方库,以下这些都没问题:
import numpy as np
from scipy.spatial import distance_matrix
from scipy.spatial import ConvexHull
from shapely.geometry import Polygon, Point
from numpy import random
import csv
import sys
唯独这个商业包死活运行不了...
from gurobipy import *
尝试了两种方案:
1.把默认Python改成我anaconda的文件路径
设置路径为“D:\\anaconda3\\envs\\spaghetti37\\python”,或“D:\\anaconda3\\envs\\spaghetti37\\python.exe”均返回1(失败了)
看了另一种设置为了“D:\\anaconda3\\envs\\spaghetti37”,报错了[CreateProcess error=5, 拒绝访问],我还以为是权限的问题,改了好久,发现他就是不能读取文件夹...所以这种必然是错得...
2.在bat文件中通过dos命令切换到该python所在目录,然后运行py文件。
forpy.bat:
@echo off
D:
cd D:\anaconda3\envs\spaghetti37
start python C:\Users\10846\Desktop\lzy\meter50\demo.py
exit
java代码:
Process pr = Runtime.getRuntime().exec("cmd /c C:\\Users\\10846\\Desktop\\lzy\\meter50\\forpy.bat");
虽然返回得是0(成功),但是一直拿不到输出结果...