Как запустить проект Java в Python? - PullRequest
0 голосов
/ 09 мая 2020

У меня огромный проект Java, который мне приходится запускать несколько раз и проверять вывод. Я хорошо разбираюсь в python, но довольно новичок в Java, поэтому мне было интересно, как запустить Java и проверить результаты в python.

Структура файла проекта:

MainFolderName
├── .idea
│   ├── artifacts
│   └── libraries
├── lib
│   ├── mathlibrary.jar
│   └── gson-1.2.3.jar
├── out
├── resources
│   ├── pic1.png
│   └── pic2.png
├── src
│   ├── srcfile1
│   │   ├── function1.java
│   │   └── function2.java
│   ├── srcfile2
│   │   ├── anotherfunction1.java
│   │   └── anotherfunction2.java
│   ├── game
│   │   ├── someconfigurations.java
│   │   └── Main.java
│   ├── META-INF
│   └── environment.txt (used in Main.java)
├── config.txt
├── Main.iml
├── setup.json
└── pythonfiletorunMainjava.py

Когда я пытаюсь запустить указанный выше проект, используя код:

import os.path,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', '-classpath',  'C:\Program Files\Java\jdk1.8.0_211', # all dependencies are in this folder 
    'parseJason'] 
    proc = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
    stdout,stderr = proc.communicate(stdin)

compile_java('./path/to/Main.java')
execute_java('./path/to/Main.java', 'setup.json')

, я получаю следующую ошибку: CalledProcessError: Command '['javac', './path/to/Main.java']' returned non-zero exit status 1.

Выходные данные Anaconda содержат некоторую ошибку:

error: package com.golden.gamedev does not exist 
import com.golden.gamedev.GameLoader;
       ^

и некоторые другие:

error: cannot find symbol
    public static Something xyz;
                  ^
  symbol:   class Something
  location: class Main

"что-то" связано с несуществующими пакетами. В META-INF есть несколько путей к классам.

Спасибо за ваше время. Буду признателен за вашу помощь в отладке проблемы.

edit: В дополнение к этому, есть ли способ добавить строковые входы через python? В настоящее время Main. java использует args = new String[] {'some string'} в качестве входных данных в основной функции.

1 Ответ

1 голос
/ 10 мая 2020

Проверьте файловую структуру проекта и сравните с пакетом в ваших Java классах.

MainFolderName
├───Main.java
└───com
    └───test
        └───config
            └───Config.java

Main. java

import com.test.config.Config;

public class Main {

    public static void main(String args[]) {
        Config c = new Config();
        c.printConfig();
    }
}

Config. java

package com.test.config;

public class Config {

    public Config() {}

    public void printConfig() {
        System.out.println("Test Print Config");
    }
}

Я думаю, что вы могли бы протестировать компиляцию Java, сначала в терминале, а затем запустить это в программе Python.

Вот пример ввода аргументов в Python: https://www.tutorialspoint.com/python/python_command_line_arguments.htm

Я надеюсь, что смогу вам помочь и прошу прощения за свой английский sh: P.

...