You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用Jython调用Python脚本时如何传递参数

解决方案

核心实现逻辑:要达到和main.py arg1等效的命令行传参效果,只需要在执行目标Python脚本前,通过Jython引擎配置Python内置的sys.argv参数列表即可,sys.argv的结构和命令行执行时完全一致,第一个元素为脚本名称,后续元素为按顺序传入的参数。

修改后的Java代码

public static void pyCode(String argumentOne) throws FileNotFoundException, ScriptException {
    StringWriter writer = new StringWriter(); //输出结果将存储在这里

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptContext context = new SimpleScriptContext();

    context.setWriter(writer); //配置输出重定向
    ScriptEngine engine = manager.getEngineByName("python");
    
    // 新增传参逻辑
    engine.put("inputArg", argumentOne);
    // 初始化sys.argv,结构和命令行执行规则保持一致
    engine.eval("import sys\nsys.argv = ['main.py', inputArg]", context);

    engine.eval(new FileReader("main.py"), context);
    System.out.println(writer.toString());
}

Python脚本(main.py)调用示例

脚本内读取参数的方式和普通命令行传参完全一致:

import sys
# sys.argv[0]固定为脚本名,第一个参数从sys.argv[1]开始读取
received_arg = sys.argv[1]
print(f"接收到Java传入的参数:{received_arg}")

补充说明

  • 若需要传递多个参数,只需向sys.argv列表追加元素即可,例如sys.argv = ['main.py', arg1, arg2, arg3]对应命令行执行效果main.py arg1 arg2 arg3
  • 采用engine.put传递参数的方式无需额外处理特殊字符转义,比字符串拼接参数的方式更安全,可避免脚本注入风险
  • 若传递非字符串类型的参数(比如数字、自定义Java对象),Jython会自动完成类型适配,Python侧可以直接读取使用

内容的提问来源于stack exchange,提问作者mikegr3p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:04