Как вызвать Java-программу с classpath из Python 3.x - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь выполнить внешнюю Java-программу из программы Python 3.7, используя команду Java с classpath. Я использую модуль subprocess.Popen в Python. Почему-то я не могу заставить его работать! Цени любую помощь!

cmd = ['java',
           '-classpath', 'C:/Users/Documents/MqTransfer.jar', 'C:/Users/Documents/com.ibm.mq.commonservices.jar',
           'C:/Users/Documents/com.ibm.mq.headers.jar', 'C:/Users/Documents/com.ibm.mq.jar',
           'C:/Users/Documents/com.ibm.mq.jmqi.jar', 'C:/Users/Documents/com.ibm.mq.pcf.jar',
           'C:/Users/Documents/connector.jar', 'C:/Users/Documents/xerces.jar',
           'MyMqTransfer', 'C:/Users/Documents/queueTransfer.properties']
    jproc = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
    output, errors = jproc.communicate()
    print(output, errors)

Я получаю сообщение об ошибке ниже

b '' b'Error: Не удалось найти или загрузить основной класс C: .Users.Documents.com.ibm.mq.commonservices.jar \ r \ n '

Когда я пытаюсь запустить программу Java из моего пакетного скрипта, она работает нормально! Это команда, которую я использую в своем пакетном скрипте. Проблема с моим кодом Python!

java -classpath MqTransfer.jar;com.ibm.mq.commonservices.jar;com.ibm.mq.headers.jar;com.ibm.mq.jar;com.ibm.mq.jmqi.jar;com.ibm.mq.pcf.jar;connector.jar;xerces.jar  com.ibm.my.mq.MyMqTransfer C:\Users\Documents\queueTransfer.properties

1 Ответ

1 голос
/ 03 июня 2019

Исходя из ошибки, я считаю, что выполняемый процесс выглядит примерно так: 'java -classpath C: /Users/Documents/MqTransfer.jar c: /Users/Documents/com.ibm.mq.commonServices.jar [с последующимостальные аргументы, которые вы передаете для обработки] ', так что java передается MqTransfer.jar как весь аргумент classpath и думает, что C: .Users.Documents.com.ibm.mq.commonservices.jar' - ваш класс для запуска,Попробуйте объединить весь ваш намеченный путь к классу в 3-й аргумент вашего запуска, и я думаю, что вы будете в порядке.Это будет выглядеть примерно так:

cmd = ['java',
           '-classpath', 'C:/Users/Documents/MqTransfer.jar;C:/Users/Documents/com.ibm.mq.commonservices.jar;C:/Users/Documents/com.ibm.mq.headers.jar;C:/Users/Documents/com.ibm.mq.jar;C:/Users/Documents/com.ibm.mq.jmqi.jar;C:/Users/Documents/com.ibm.mq.pcf.jar;C:/Users/Documents/connector.jar;C:/Users/Documents/xerces.jar',
           'MyMqTransfer', 'C:/Users/Documents/queueTransfer.properties']
...