作爲我的基於python的程序的一部分,我必須調用一個Java程序 - 用os.system()完全解決這個問題。它運行良好,直到我將整個事物從一個目錄移到另一個目錄。我更改了python代碼中的所有文件路徑,並且java程序 - 盡我所知,我不太瞭解java - 依賴於相關文件路徑,這些文件路徑在移動過程中未被更改。但是現在,java程序不會打開。命令行看起來幾乎立即消失,所以我知道os.system()正在工作。它必須與我在os.system中使用的文件路徑有關,因爲當我將它改回到原始文件路徑時,它再次正常工作。代碼如下:通過命令行從python調用java程序的奇怪錯誤
os.system("java -jar C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)
其中fileNames是一個變量thingie作爲參數傳遞給java程序,我相當肯定不是問題。如果我直接從cmd.exe調用python程序,那麼它會讓我回到「無法訪問Jarfile C:\ Documents」錯誤消息。我想這可能與在文件路徑的空間做的,所以我把下劃線在:
os.system("java -jar C:\\Documents_and_Settings\\enginx_mgr.ISIS\\My_Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)
它給了我同樣的「無法訪問jar文件」的消息,但這次完整的文件路徑。在文件路徑上試着os.path.exists()
返回true,所以python知道它是一個真正的文件路徑;我想這肯定是命令行不同意它,但我不知道爲什麼。有任何想法嗎?
編輯:原始文件路徑,如果感興趣的,是C:\Inetpub\ftproot\JPivSource\jpivc.jar
編輯2:它幾乎可以肯定不是文件路徑,通過下面的答案和事實去,他們沒有工作(和原來的文件路徑作品)。從預感中檢查安全選項,並且我完全控制.jar文件,就像系統一樣,所以它不是因爲安全原因無法訪問它。仍然在零平方。
你不應該在路徑中使用反斜槓。正斜線適用於所有系統,反斜線適用於Windows。除此之外,'subprocess'有一些很好的功能,通過一個數組獲取命令和參數,所以你不需要引用等。 – ThiefMaster
我非常懷疑你的兩條路徑是相同的。這裏有一個類似的問題:http://stackoverflow.com/questions/204017/how-do-i-execute-a-program-from-python-os-system-fails-due-to-spaces-in-path – Jacob
你的意思是你實際上在你的系統上重命名爲「文檔和設置」?或者你是否只在電話中放置了_而不是空格?我建議嘗試將jar的名稱放在轉義引號中:「java -jar \」指向jar \「%s」的路徑。 – Nodebody