从 Python 调用.jar文件



我正在解密一个PGP文件,我可以使用Python完成该文件,因为我绝对找不到它的资源/示例。我确实在这里提出了这个问题,但没有运气!

但是,我确实在Java中开发了一些代码来解密文件。

现在,我想从我的 python 代码中调用这个 jar 文件,因为我可以找到使用 os.system 或 subprocess.call 以类似方式调用外部程序的人。

下面是应该完成工作的示例代码:

 os.system("java -jar PGPEncryption.jar BC.csv.pgp X.csv <password>")
 x = subprocess.call(["java -jar PGPEncryption.jar BC.csv.pgp X.csv <password>"], shell=True)
 print(x)

我没有打印结果的运气。

任何建议将不胜感激!!

编辑:我也尝试了以下代码:

subprocess.call(['java', '-jar', 'abc.jar'])

它不起作用并给出以下错误:

 Exception in thread "main" java.lang.UnsupportedClassVersionError: 
        pgpencryption/PGPExampleUtil : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: pgpencryption.PGPExampleUtil. Program will exit.
在这里,

您的第一个问题是编译代码的 Java 版本和运行代码的 java 版本。

例如,如果您使用 java 版本 8 编译了代码,并且正在使用 java 版本 7 或 6(低于编译版本)运行 Java 应用程序,则会收到Unsupported major.minor version 52.0错误。因此,使用比服务器版本更低或相同的版本编译代码。

检查服务器中的版本:java --version

检查开发工具中编译代码

的版本

在下面的代码中,还要提供 jar 文件的完整路径。

os.system("java -jar fullpathPGPEncryption.jar BC.csv.pgp X.csv <password>")

如果你想

在python代码中使用JAR文件中的模块,你需要使用JYTHON运行该py文件。

java -jar jython.jar demo.py

杰通下载

查看此处以获取教程

使用Popen的子流程

import subprocess
x = subprocess.Popen("java -jar PGPEncryption.jar BC.csv.pgp X.csv <password>", stderr=subprocess.PIPE, stdout=subprocess.PIPE)
out,err = x.communicate()
print "Error is - ",err
print "Output is -",out

最新更新