传递参数给Python脚本在Java中(Passing arguments to Python sc

2019-10-18 07:51发布

我运行一个Java类像这样的python脚本:

PythonInterpreter interp = new PythonInterpreter();
PythonInterpreter.initialize(System.getProperties(), System.getProperties(), new String[0]);
interp.execfile("C:\\Users\\user1\\workspace\\Projectx\\script.py");

问题是,script.py通常需要命令行参数如下:

蟒script.py -i C:-o C / diretory /路径:/目录/路径

是否有可能通过在Java中PythonIntepereter通过这些参数?

更新:

THX到Juned阿赫桑我的代码现在看起来是这样的:

String[] args = {"-i " + lawlinkerIfolder.toString() + " -o " + lawlinkerOfolder.toString()};
PythonInterpreter interp = new PythonInterpreter();
PythonInterpreter.initialize(System.getProperties(), System.getProperties(), args);
interp.execfile("C:\\Users\\user1\\workspace\\Projectx\\script.py");

但脚本仍然没有得到任何参数。

我是否正确使用呢?

Answer 1:

在下面的呼叫最后一个参数是命令行参数:

PythonInterpreter.initialize(System.getProperties(), System.getProperties(), new String[0]);

从PythronInterpreter的javadoc :

初始化

公共静态无效初始化(属性preProperties,属性postProperties,的String [] argv的)

初始化Jython的运行时间。 在创建任何其他Python对象(包括PythonInterpreter)之前,这应该只被调用一次。 参数:preProperties - 一组属性。 通常System.getProperties()被使用。 preProperties覆盖从注册表文件的属性。 postProperties - 另一组属性。 像python.home,python.path从注册表文件中的所有其他值的值可以被添加到该属性设置。 postProperties覆盖系统性能和注册表性能。 argv的-命令行参数,分配到sys.argv中。



Answer 2:

我有同样的问题,并发现它可以通过使用“实习”的字符串,即得到解决,

for (int i = 0; i args.length; ++i) {
    args[i] = args[i].intern();
}

我使用的Jython 2.5.3。 希望这会有所帮助。



文章来源: Passing arguments to Python script in Java