【问题标题】:Call python script with arguments from java使用来自 java 的参数调用 python 脚本
【发布时间】:2016-05-04 13:15:25
【问题描述】:

我想使用 ScriptEngine 从 java 调用 python 脚本,但我不知道如何添加参数

从命令行它类似于:python test.py language 10 "some text" 其中 language, 10, "some text" 是用户提供的参数。

这是我要修改的一段代码(参考这个answer

 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 FileReader("test.py"), context);
 System.out.println(writer.toString());

【问题讨论】:

  • 您也可以通过Process p = Runtime.getRuntime().exec("python test.py language 10 \"some text\""); 来完成,如stackoverflow.com/questions/17756721/… 所示
  • 感谢您的评论。是的,我知道,但我想知道是否可以使用脚本引擎来完成。

标签: java python


【解决方案1】:

通过documentation,看来这可以通过使用put()来实现:

// rest of your code
ScriptEngine engine = manager.getEngineByName("python");
engine.put(ScriptEngine.ARGV, array_of_strings);
engine.eval(new FileReader("test.py"), context);
// rest of your code

其中array_of_strings 是用作参数的字符串数组。

【讨论】:

  • 感谢您的回答,我试过了,但它会抛出 NullPointerException
  • @Daisy 哪个变量为空?
  • 它指的是这一行:engine.put(ScriptEngine.ARGV, array_of_strings);
  • @Daisy 你真的启动了一个字符串数组吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多