Это первый раз, когда я пишу вопрос на этом сайте, так что прости меня, если я ошибаюсь.
Я пишу программу на Java, которая:
- читает из файла Json некоторые параметры;
- Выполнить файл python, передав параметры, прочитанные ранее.
Я использую Eclipse P в качестве Java IDE и установил на свой компьютер версию Python 3.7.
Сценарий файла Java:
import java.io.IOException;
import java.util.Set;
import org.json.JSONArray;
import org.json.JSONObject;
import org.python.core.PyString;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;
public class MainClass {
public static void main(String[] args) throws IOException {
JSONArray newJsonArray = null;
String p2 = "C:\\Users\\martina\\OneDrive\\parameter.json";
newJsonArray = ReadJson.parseJSONFile(p2);
JSONObject jobjt = newJsonArray.getJSONObject(0);
Set<String> keyset = jobjt.keySet();
String[] myArrayofKeys = keyset.toArray(new String[keyset.size()]);
PythonInterpreter interpreter = new PythonInterpreter();
PySystemState sys = interpreter.getSystemState();
sys.path.append(new PyString("C:\\Program Files\\Python37\\Lib\\site-packages"));
//setting the parameters
for(int i=0;i<myArrayofKeys.length;i++) {
System.out.println(myArrayofKeys[i]);
interpreter.set(myArrayofKeys[i],
jobjt.getDouble(myArrayofKeys[i]));
}
interpreter.set("spec_id", "A00366" );
interpreter.execfile("C:\\Users\\martina\\K1-S1.py");
interpreter.close();
}
}
В файле Python у меня есть некоторая формула для вычисления переменных с параметрами, которые JAva передает ему, и другими параметрами, которые Python принимает из MongoDB. Файл Python:
import pymongo
import math
import json
uri = "mongodb+srv://marts:password!@cluster0-owjhc.mongodb.net/test"
client = pymongo.MongoClient(uri)
database = client['bs']
collection = database['spec']
pi = math.pi
spec = list(collection.find({"SPEC_ID":spec_id}))[0]
#first stage
spec["TOP TREAD Lenght"]=((spec["BTDRUMdia"]+spec["TREAD PLY #1gr.ga."]*2+spec["TREAD PLY #1 FEGSgr.ga."]*4+spec["TREAD PLY #2gr.ga."]*2+spec["TREAD PLY #2 FEGSgr.ga."]*4+spec["CAP PLY / CAP STRIPgr.ga."]*2+spec["TOPTREADgr.ga. @CL"])*pi+TOPTREAD_Splice_Amount)*TOPTREAD_ApplicationStretch
print("Un risultato e': ", spec["TOP TREAD Lenght"] )
Как видите, я использую Jython для "соединения" между Java и Python, но я не знаю, является ли это лучшим решением, последнее обновление было в 2015 году.
В любом случае, в файле Java я добавил два модуля Python через PySystemState sys = interpreter.getSystemState (); , потому что при запуске он выдал ошибку ImportError: Нет модуля с именем pymongo .
Я добавляю модуль pymongo, но Ecplise выдает ошибку Для использования mongodb + srv: // URIs должен быть установлен модуль «dnspython». Затем я добавил этот модуль, найденный в Интернете, но появилась другая ошибка AttributeError: у объекта 'module' нет атрибута 'SOL_UDP' .
Если я запускаю однофайловый Python с PyCharm, он соединяется с проблемами MongoDB и работает отлично.
Я не знаю, как продолжить, или я правильно добавил два модуля на Java. Кроме того, я спрашиваю, есть ли другой и лучший способ соединить Java с Python.
Я итальянец, поэтому прошу прощения за мой английский и благодарю вас за ваше время.