【问题标题】:Passing arguments to Python script in Java在 Java 中将参数传递给 Python 脚本
【发布时间】:2013-07-04 09:24:58
【问题描述】:

我正在这样的 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");

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

我用对了吗?

【问题讨论】:

    标签: java python jython


    【解决方案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。

    【讨论】:

    • 谢谢你,看起来很有希望。但是我不确定如何使用它。我现在有String[] args = {lawlinkerIfolder.toString(), lawlinkerOfolder.toString()}; but the script is still not working properly. PythonInterpreter.initialize(System.getProperties(), System.getProperties(), args);
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多