Python 指令碼中呼叫 Java 程式時 Classpath 錯誤
1. 問題背景
一位使用者正在使用 Python 指令碼執行 Java 程式,由於指令碼執行時間較長,他希望並行執行多個指令碼。他在指令碼中使用以下程式碼呼叫 Java 程式:
x = 'java -cp "lib/*:esalib.jar" clldsystem.esa.ESAAnalyzer %s %s' % (word1, word2)
args = shlex.split(x)
print args
p = subprocess.Popen(args)
p.wait()
此程式碼可以正常工作。為了不混淆輸入檔案和臨時結果檔案,使用者在包含指令碼的資料夾內建立了一個新資料夾。他將程式碼更新為:
x = 'java -cp "../lib/*:esalib.jar" ../clldsystem.esa.ESAAnalyzer %s %s' % (word1, word2)
args = shlex.split(x)
print args
p = subprocess.Popen(args)
p.wait()
但是,此更新的程式碼報出錯誤:
Error: Could not find or load main class ...clldsystem.esa.ESAAnalyzer
2. 解決方案
為了解決此錯誤,使用者可以執行以下步驟:
- 確保 Java 類路徑正確。使用者需要確保 Java 類路徑中包含 Java 程式所在的 JAR 檔案和庫檔案。在上面的程式碼示例中,Java 類路徑設定為
"-cp 'lib/*:esalib.jar'" / public_html/clldsystem/esa/ESAAnalyzer %s %s"
。使用者需要檢查 Java 類路徑是否正確,並確保 JAR 檔案和庫檔案存在且可訪問。 - 確保 Java 程式的主類正確。使用者需要確保在 Java 程式的主類中指定了正確的入口點。在上面的程式碼示例中,主類設定為
"clldsystem.esa.ESAAnalyzer"
/ public_html/clldsystem/esa/ESAAnalyzer %s %s。使用者需要檢查主類是否正確,並確保它具有公共的 main 方法。 - 確保 Java 程式的可執行性。使用者需要確保 Java 程式是可執行的。在 Linux 系統上,可以使用以下命令將 Java 程式設定為可執行:
chmod +x <java_program_name>
- 確保 Java 虛擬機器已安裝。使用者需要確保計算機上已安裝 Java 虛擬機器(JVM)。JVM 是執行 Java 程式所需的軟體環境。如果尚未安裝 JVM,可以從 Java 官方網站下載並安裝。
- 確保 Python 指令碼的編碼正確。使用者需要確保 Python 指令碼的編碼正確。如果指令碼的編碼不正確,可能會導致 Java 程式無法正常執行。使用者可以使用以下命令檢查指令碼的編碼:
file <script_name>
如果指令碼的編碼不正確,可以使用以下命令將其轉換為正確的編碼:
iconv -f <original_encoding> -t <desired_encoding> <script_name> > <new_script_name>
- 確保 Python 指令碼具有可執行許可權。使用者需要確保 Python 指令碼具有可執行許可權。在 Linux 系統上,可以使用以下命令將 Python 指令碼設定為可執行:
chmod +x <python_script_name>
- 使用者可以嘗試重新執行 Python 指令碼,看看錯誤是否已解決。
以下是一個使用 Java 程式的 Python 指令碼示例:
import subprocess
import shlex
word1 = "word1"
word2 = "word2"
x = 'java -cp "lib/*:esalib.jar" clldsystem.esa.ESAAnalyzer %s %s' % (word1, word2)
args = shlex.split(x)
p = subprocess.Popen(args)
p.wait()
print("Java program executed successfully!")
此指令碼將使用 Java 類路徑中的 JAR 檔案和庫檔案執行 Java 程式"clldsystem.esa.ESAAnalyzer"
。Java 程式的主類是"clldsystem.esa.ESAAnalyzer"
。指令碼使用"subprocess"
模組呼叫 Java 程式,並等待 Java 程式執行完成。
更多內容可以到個人主頁學習《測試工程師 Python 工具開發實戰》書籍、《大話效能測試 JMeter 實戰》書籍
相關文章
- 在python程式中呼叫java程式碼PythonJava
- 使用Python和Java呼叫Shell指令碼時的死鎖陷阱PythonJava指令碼
- 如何呼叫python中的shell指令碼?Python指令碼
- Bash 指令碼中的錯誤處理指令碼
- python程式碼錯誤RuntimeError: Session is closedPythonErrorSession
- 執行指令碼寫入中間表錯誤返回錯誤資訊指令碼
- SOLIDWORKS啟動時出現指令碼錯誤問題Solid指令碼
- sqlplus執行指令碼時遇到錯誤自動停止SQL指令碼
- python呼叫matlab程式,MATLAB 指令碼打包為 exe可執行程式PythonMatlab指令碼行程
- Java程式中除錯Python程式方法Java除錯Python
- 誰能看出這[方法呼叫]和[多表查詢]程式碼中的錯誤嗎?
- python呼叫yolov3的小錯誤PythonYOLO
- 如何避免Java程式碼中的空指標錯誤NullPointerException? - foojayJava指標NullException
- Windows 錯誤程式碼Windows
- MySQL 錯誤程式碼MySql
- Java初學者容易犯的程式碼錯誤Java
- JNI:Java程式碼呼叫原生程式碼Java
- shell指令碼執行錯誤 $‘\r‘:command not found指令碼
- 解決shell指令碼錯誤$’r’ command not found指令碼
- MySQL:錯誤程式碼:2059MySql
- VS錯誤程式碼列
- 編寫 SQL 程式碼時常犯的九個錯誤SQL
- 使用代理時常見的錯誤程式碼有哪些?
- C# 呼叫Python程式碼C#Python
- 檔案格式引起的指令碼執行錯誤指令碼
- elasticsearch之Java呼叫原生程式碼ElasticsearchJava
- 公司網站顯示指令碼錯誤怎麼辦網站指令碼
- 使用shell指令碼在Linux中管理Java應用程式指令碼LinuxJava
- lua~IDEA中除錯lua指令碼Idea除錯指令碼
- PostgreSQLjdbc錯誤程式碼對映(SQLSTATE)SQLJDBC
- 連線MYSQL 錯誤程式碼2003MySql
- 常見 HTTP 錯誤程式碼大全HTTP
- eclipse中:The type java.lang.object cannot be resolved錯誤(jdk配置錯誤)EclipseJavaObjectJDK
- 使用Python時常見的9個錯誤Python
- java專案中的classpath和類載入器Java
- FastScripts for Mac(指令碼呼叫工具)ASTMac指令碼
- Laravel 中執行 Python 指令碼LaravelPython指令碼
- LLDB+Python指令碼:增強LLDB除錯LLDBPython指令碼除錯