2016-07-29 46 views
0

我有一個Python腳本,它是我的項目中的一個資源。與腳本一起的是腳本需要的XML文件才能正常運行。我讀這兩個文件作爲InputStream,然後創建臨時文件兩種:如何在Java中將腳本作爲文件運行?

InputStream is = (this.getClass().getClassLoader().getResourceAsStream("InterWebApp.py")); 
File script = File.createTempFile("script", ".py"); 
Files.copy(is, script.toPath(), StandardCopyOption.REPLACE_EXISTING); 
InputStream is1 = (this.getClass().getClassLoader().getResourceAsStream("setup.xml")); 
File xml = File.createTempFile("config", ".xml"); 
Files.copy(is1, xml.toPath(), StandardCopyOption.REPLACE_EXISTING); 

但是,我不知道如何啓動腳本作爲一個過程:

Process p = Runtime.getRuntime().exec("." + script.getAbsolutePath()); 
p.waitFor(); 

上面的代碼拋出IOException。我如何運行script.py並確保它可以訪問​​3210?現在,Python腳本只是使用絕對路徑來解析XML文件,但這個路徑對於臨時文件來說不會相同。

+0

我對Java很生疏,對'File'類的知之甚少,但是這看起來對我來說很懷疑:''。「 + script.getAbsolutePath()'。似乎你想要''./「'或'」。\「'取決於你的環境,你想要基本的文件名,而不是絕對路徑。 –

+0

@JuanTomas我試過'「./」+ script.getName()'但是拋出異常,因爲進程找不到文件 – SVN600

+0

請問你能提供例外嗎? –

回答

1

基本上,你問自己的問題,因爲你問它的絕對路徑,但它前綴爲「。」,這通常是一個相對路徑修飾符。嘗試.exec(script.getAbsolutePath())初學者。此外,取決於您的操作系統和/或配置,.py文件可能會也可能不會被識別爲可執行文件(例如,在Unix系統上,只有具有可執行標誌的文件纔會被識別爲可執行文件)。您可能實際上想要查找Python可執行文件的位置並將該腳本作爲參數傳遞。

+0

我正在運行Linux,當我嘗試對'.getAbsolutePath'提出建議時,我得到一個權限被拒絕的錯誤。有沒有解決這個問題的方法?我被告知執行在JAR中打包的實際資源文件基本上是不可能的。 – SVN600

+0

您必須在寫入文件和嘗試執行文件之間設置文件權限。 –

+0

我設置了使用'.exec(「chmod 777」+ script.getAbsolutePath())執行的權限,但我第一次調用該方法時獲得了權限被拒絕的異常,但是第二次成功啓動該過程,但是服務不運行 – SVN600

相關問題