我正在解密一个PGP文件,我可以使用Python完成,因为我绝对找不到它的资源/示例。我确实提出问题here没有运气!
但是,我确实用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.
答案 0 :(得分:0)
如果你想在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
答案 1 :(得分:0)
这里你的第一个问题是你的java版本,你用它编译了运行代码的代码和java版本。
例如,如果您使用java版本8编译了代码,并且运行的是java版本为7或6(低于编译版本)的java应用程序,则会出现Unsupported major.minor version 52.0
错误。因此,使用比服务器版本更低或相同的版本编译代码。
检查服务器中的版本:java --version
检查开发工具中用于编译代码的版本
在下面的代码中,也提供了jar文件的完整路径。
os.system("java -jar \fullpath\PGPEncryption.jar BC.csv.pgp X.csv <password>")