首页 > 解决方案 > 如何从 Python 3.x 调用具有类路径的 java 程序

问题描述

我正在尝试使用带有类路径的 java 命令从 python 3.7 程序执行外部 java 程序。我在 Python 中使用 subprocess.Popen 模块。不知何故,我无法让它工作!感谢任何帮助!

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'错误:无法找到或加载主类 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

标签: python-3.xsubprocessexecutable-jar

解决方案


根据错误,我相信正在执行的进程类似于 'java -classpath C:/Users/Documents/MqTransfer.jar c:/Users/Documents/com.ibm.mq.commonServices.jar [接下来是其余的你传递给进程的参数]' 这样 java 被传递给 MqTransfer.jar 作为整个类路径参数,并认为'C:.Users.Documents.com.ibm.mq.commonservices.jar' 是你要启动的类。尝试将整个预期的类路径组合到启动的第三个参数中,我认为你会很好。它看起来像这样:

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']

推荐阅读