在Java中将参数传递给Python脚本

时间:2013-07-04 09:24:58

标签: java python jython

我正在这样的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通常采用如下命令行参数:

  

python script.py -i C:/ diretory / path -o C:/ directory / path

是否可以通过Java中的PythonIntepereter传递这些参数?

更新

向Juned Ahsan致谢我的代码现在看起来像这样:

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");

但剧本仍然没有得到任何论据。

我是否正确使用了这个?

2 个答案:

答案 0 :(得分:1)

以下调用中的最后一个参数用于命令行参数:

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

来自PythronInterpreter javadocs

  

<强>初始化

     

public static void initialize(Properties preProperties,                                 属性postProperties,                                 String [] argv)

     

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

答案 1 :(得分:0)

我有同样的问题,发现可以通过使用&#34; interned&#34;字符串,即

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

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