Python выполняет Java - Как передать аргументы командной строки в основной метод Java? - PullRequest
0 голосов
/ 23 мая 2018

Я следовал SO Ответ , чтобы выполнить Java-программу из Python

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 из консоли работает, как и ожидалось

1 Ответ

0 голосов
/ 23 мая 2018

Вы передаете аргументы в stdin, которые вам нужно будет прочитать в Java, используя соответствующие методы.

Вместо этого вы можете просто добавить аргументы в конец массива команд.Таким образом, они будут аргументами командной строки, которые отображаются в вашем массиве args [] в Java.Обратите внимание, что для каждого аргумента нужен массив с элементом, поэтому я добавил вызов 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...