2017-10-12 107 views
1

我正在解密一個PGP文件,我可以使用Python來完成,因爲我完全找不到資源/示例。我確實提出了問題here沒有運氣!從Python中調用.jar文件

但是,我確實在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

據我所知,有'shell中運行= TRUE;應打印結果,以'stdout',即你不需要打印'x'。也許更好的解決方案是生成一個CompletedProcess對象,它具有'stdout'作爲屬性。請參閱[本文檔](https://docs.python.org/3/library/subprocess.html),它是解釋子流程的python頁面。 –

+0

@Parth S Rawal,請參閱下面的答案。這可能會幫助你。 –

回答

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>")

+1

感謝它的工作!該版本存在問題。 –

+0

@Parth S Rawal,你接受了不是我的錯誤答案。 –

+0

糟糕!對不起:) –

0

如果你想使用JAR文件的模塊在Python代碼中,你需要使用JYTHON來運行py文件。

java -jar jython.jar demo.py 

Jython download

Check here for tutorial

子過程與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 
+0

不,我想在Python程序中運行.JAR文件。 –

+0

請檢查更新 –

+0

這是什麼錯誤,我得到:java.lang.UnsupportedClassVersionError:pgpencryption/PGPExampleUtil:不支持major.minor版本52.0。請注意,如果我從命令提示符運行相同,此代碼工作得很好。 –