Java通过Jython(Python)调用,通过Anisble Python API运行Ansible脚本
我能够使用Java调用Python脚本 我还能够使用Python调用 然而,我似乎无法获得Java->Jython(Python)->Ansible的正确配置 当我尝试从Java(Jython)运行上面的Python/Ansible API示例时,当前出现以下错误:Java通过Jython(Python)调用,通过Anisble Python API运行Ansible脚本,java,python,ansible,jython,Java,Python,Ansible,Jython,我能够使用Java调用Python脚本 我还能够使用Python调用 然而,我似乎无法获得Java->Jython(Python)->Ansible的正确配置 当我尝试从Java(Jython)运行上面的Python/Ansible API示例时,当前出现以下错误: ------------------------------------ File "<string>", line 1, in <module> File "/home/asdev/pythonFiles
------------------------------------
File "<string>", line 1, in <module>
File "/home/asdev/pythonFiles/PythonAPIBridge.py", line 7, in <module>
from ansible.parsing.dataloader import DataLoader
File "/home/asdev/ansible/ansible/lib/ansible/parsing/dataloader.py", line 15, in <module>
from ansible import constants as C
File "/home/asdev/ansible/ansible/lib/ansible/constants.py", line 12, in <module>
from jinja2 import Template
ImportError: No module named jinja2
------------------------------------
Ansible Python API
资料来源:
git clone https://github.com/ansible/ansible.git --recursive
简单java代码(如果您需要接口或工厂,请告诉我,但它是锅炉板):
注释掉的代码是当我尝试在PythonAPIBridge尝试运行Ansible之前运行setup.py时
我了解Ansible tower,我知道我可以为Ansible编写Java cli解释器,但我更喜欢这种解决方案。Hi user2026410,欢迎使用SO。对于缺少的jinja2问题,这是因为您似乎忘记了在回溯中描述的关于
isabs
,您遗漏了错误消息,但我猜这是因为s
是None
,所以您需要在jython解释器中定义sys.executable
(假设我的理论是正确的);将来,请务必在问题中包含错误消息。我确实运行了“pip install-r requirements.txt”,并且如上所述,它可以从cli工作。问题是当从java通过jython运行时,它不工作。我添加了错误的最后一行,不确定它是如何被切断的。谢谢你指出这一点。我打印了sys.executable,从java/jython中,它是None。在弄清楚如何设置后,我会看看是否能走得更远。谢谢。嗨,用户2026410,欢迎来到SO。对于缺少的jinja2问题,这是因为您似乎忘记了在回溯中描述的关于isabs
,您遗漏了错误消息,但我猜这是因为s
是None
,所以您需要在jython解释器中定义sys.executable
(假设我的理论是正确的);将来,请务必在问题中包含错误消息。我确实运行了“pip install-r requirements.txt”,并且如上所述,它可以从cli工作。问题是当从java通过jython运行时,它不工作。我添加了错误的最后一行,不确定它是如何被切断的。谢谢你指出这一点。我打印了sys.executable,从java/jython中,它是None。在弄清楚如何设置后,我会看看是否能走得更远。谢谢
git clone https://github.com/ansible/ansible.git --recursive
public static void main(String[] args) {
Properties props = new Properties();
//props.setProperty("python.path", "/home/asdev/pythonFiles");
props.setProperty("python.path", "/home/asdev/ansible/ansible:/home/asdev/ansible/ansible/lib:/home/asdev/pythonFiles");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter inter = new PythonInterpreter();
for(PyObject p : inter.getSystemState().path.asIterable()) {
System.out.println(p);
}
//Try running setup.py from a file
//inter.exec("execfile(\"/home/asdev/pythonFiles/runFile.run\")");
//Try running setup.py
//inter.exec("import sys");
//inter.exec("sys.argv = ['egg_info']");
//inter.exec("execfile(\"/home/asdev/ansible/ansible/setup.py\")");
//Run Python scipt that calls Ansible
PythonAPIFactory factory = new PythonAPIFactory("PythonAPIBridge");
print(factory.create("test", "testing"));
inter.close();
}