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

Python调用Java程序:如何向Java main方法传递命令行参数?

解决Python调用Java程序时参数无法传入main方法args数组的问题

嘿,我明白你遇到的问题了——用Python的subprocess调用Java程序时,明明传了5 5 5 5 5 5 5,但Java main方法里的String[] args还是空的,直接在控制台跑却正常。这其实是因为你传递参数的方式错了!

问题根源

你现在是通过process.communicate(stdin)把参数塞进了Java程序的标准输入流(stdin),但Java的main方法的args数组是用来接收命令行参数的,也就是你在控制台敲java Model 5 5 ...时,跟在类名后面的那些内容。这俩完全不是一个东西,所以Java程序自然拿不到参数。

修正方案

把参数直接作为命令行参数追加到Java的执行命令里,和你手动在控制台执行的逻辑保持一致就行。这里给你修改好的代码:

import os.path
import subprocess
from subprocess import STDOUT, PIPE

def compile_java(java_file):
    subprocess.check_call(['javac', java_file])

def execute_java(java_class, args_list):
    # 把命令行参数直接加到Java命令的参数列表中
    cmd = ['java', '-cp', 'model/classification', java_class] + args_list
    process = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
    stdout, stderr = process.communicate()
    return stdout

# 编译目标Java文件
compile_java(os.path.join('model', 'classification', 'Model.java'))
# 传递拆分好的参数列表,或者用字符串split()拆分更方便
output = execute_java('Model', '5 5 5 5 5 5 5'.split())
print(output)

额外说明

  • 如果你的参数本来就是列表形式(比如['5','5',...]),直接传进去就行;如果是空格分隔的字符串,用split()方法一键拆分非常省事。
  • 要是你确实需要让Java程序从标准输入读取内容,那得在Java代码里加读取逻辑(比如用Scanner(System.in)),但根据你的需求,显然是要让参数进入args数组,所以上面的方案完全适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:53:34