1

我在这样的 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:/目录/路径 -o C:/目录/路径

是否可以通过 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");

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

我使用正确吗?

4

2 回答 2

1

下面调用中的最后一个参数是命令行参数:

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

来自PythronInterpreter javadocs

初始化

公共静态无效初始化(属性preProperties,属性postProperties,字符串[] argv)

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

于 2013-07-04T09:29:29.173 回答
0

我有同样的问题,发现它可以通过使用“interned”字符串来解决,即

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

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

于 2014-08-27T13:42:44.917 回答