我跟着SO Answer从python执行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_file, stdin):
java_class, ext = os.path.splitext(java_file)
cmd = ['java', '-cp', 'model/classification', java_class]
process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
stdout, stderr = process.communicate(stdin)
compile_java(os.path.join('model', 'classification', 'Model.java'))
execute_java('Model', '5 5 5 5 5 5 5')
我的问题是,我的java程序String[]args
的主要方法是空的。我的5 5 5 5 5 5 5
的输入序列没有到达java程序。
从控制台调用java Model 5 5 5 5 5 5 5
按预期工作
答案 0 :(得分:0)
您正在传递stdin中的args,您需要使用适当的方法在Java中读取它。
而不是这样,您只需将args添加到命令数组的末尾即可。这样,它们将成为Java中args []数组中显示的命令行参数。请注意,它需要一个数组,每个arg都有一个元素,所以我添加了一个split的调用。
def execute_java(java_file, args):
java_class, ext = os.path.splitext(java_file)
cmd = ['java', '-cp', 'model/classification', java_class] + args
process = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
stdout, stderr = process.communicate()
execute_java('Model', '5 5 5 5 5 5 5'.split())