Вызов файла jar из Python с использованием запроса JPype-total для новичков

Поэтому я использовал subprocess.call для запуска файла jar из Python следующим образом:

subprocess.call(['java','-jar','jarFile.jar',-a','input_file','output_file'])

где он записывает результат во внешний файл output_file. и -a – это вариант.

Теперь я хочу проанализировать output_file в python, но не хочу снова открывать файл. Итак, я хочу запустить jarFile.jar как функцию Python, например:

output=jarFile(input_file)

Я установил JPype и заработал, я установил путь к классу и запустил среду JVM:

import jpype

classpath="/home/me/folder/jarFile.jar"

jpype.startJVM(jpype.getDefaultJVMPath(),"-Djava.class.path=%s"%classpath)

а теперь застрял...


person kat    schedule 03.10.2014    source источник


Ответы (1)


java -jar jarFile.jar выполняет основной метод файла класса, который настроен в файле jar файл манифеста. Вы найдете это имя класса, если извлечете META-INF/MANIFEST.MF файла jar (откройте банку с помощью любого инструмента zip). Найдите значение Main-Class. Если это, например, com.foo.bar.Application, вы должны иметь возможность вызывать основной метод, подобный этому

def jarFile(input_file):
    # jpype is started as you already did
    assert jpype.isJVMStarted()
    tf = tempfile.NamedTemporaryFile()
    jpype.com.foo.bar.Application.main(['-a', input_file, tf.name])
    return tf

(Я не уверен в правильности использования модуля tempfile, пожалуйста, проверьте себя)

person bastian    schedule 09.10.2014