Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java通过Jython(Python)调用,通过Anisble Python API运行Ansible脚本_Java_Python_Ansible_Jython - Fatal编程技术网

Java通过Jython(Python)调用,通过Anisble Python API运行Ansible脚本

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

我能够使用Java调用Python脚本

我还能够使用Python调用

然而,我似乎无法获得Java->Jython(Python)->Ansible的正确配置

当我尝试从Java(Jython)运行上面的Python/Ansible API示例时,当前出现以下错误:

------------------------------------
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();
}