Java使用参数

时间:2015-07-05 07:16:18

标签: java python jython scriptengine

我想用Java执行Embedded python。

Python代码

#!/usr/bin/python

import sys

print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

Java代码

    StringWriter writer = new StringWriter(); // ouput will be stored here
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptContext context = new SimpleScriptContext();

    context.setWriter(writer); // configures output redirection
    ScriptEngine engine = manager.getEngineByName("python");

    engine.eval(new InputStreamReader(Main.class.getResourceAsStream("/py/a.py")), context);
    System.out.println(writer.toString());

当前输出

  

参数数量:1个参数。

     

参数列表:['']

如何在代码中将参数传递给此脚本?

您可以通过$python a.py hellow worldd在终端中运行脚本。

现在如果要执行java中嵌入的a.py,如何传递参数hellow worldd

1 个答案:

答案 0 :(得分:-1)

将参数解析为脚本?我不确定你的意思。你的意思是传递一个名为argv的java对象,或者你的意思是用你的脚本替换另一个字符串吗? 通常我们谈论将实例传递给解释器/脚本引擎而不是脚本,脚本只是一个包含代码的txt文件,你可以像这样传入java对象。

public class ExampleEmbeddingJython
{

    public static class Arg {
        int a = 3;

        public Arg(int a)
        {
            this.a = a;
        }

        public String toString()
        {
            return "a = " + a;
        }

        public int getA()
        {
            return a;
        }
    }

    public static void main(String[] args) throws PyException
    {
        PythonInterpreter interp = new PythonInterpreter();
        interp.set("arg", new Arg(42));
        interp.exec("print arg");
        interp.exec("x = arg.getA()+2");
        PyObject x = interp.get("x");
        System.out.println("x = " + x);
        System.out.println("Goodbye, cruel world");
    }
}