【问题标题】:Python executes Java - How to pass command line arguments to Java main method?Python 执行 Java - 如何将命令行参数传递给 Java 主方法?
【发布时间】:2018-11-02 21:21:27
【问题描述】:

我跟着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程序的main方法中String[]args是空的。我的5 5 5 5 5 5 5的输入序列没有到达java程序。

从控制台调用 java Model 5 5 5 5 5 5 5 可以正常工作

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    您在标准输入上传递参数,您需要使用适当的方法在 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())
    

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多