如何使用来自 Python 3.x 的类路径调用 java 程序

How to invoke a java program with classpath from Python 3.x

我正在尝试使用带类路径的 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'Error: Could not find or load main class 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

根据错误,我认为正在执行的过程类似于 'java -classpath C:/Users/Documents/MqTransfer.jar c:/Users/Documents/com.ibm.mq.commonServices.jar [followed by the rest of the arguments you are passing to process]' 这样 java 作为整个 class 路径参数传递 MqTransfer.jar 并认为'C:.Users.Documents.com.ibm.mq.commonservices.jar' 是您要启动的 class。尝试将整个预期的 class 路径组合到启动的第三个参数中,我认为你会很好。它看起来像这样:

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