2013-06-24 181 views
0

如果已經得到回答,我很抱歉,但我無法找到與此相關的任何內容。我有一個python程序,在運行時啓動一個子進程,它調用一個java jar文件。該命令是這樣的:在運行時指定java屬性路徑的路徑

# Build command line expression. 
expr = self.cmmTool + " " + self.cmmIpAddress + " " + self.cmmUsername + " " + self.cmmPassword + " " + cmd + " > " + self.cmmOutputFile 

# Execute command line expression. 
p = subprocess.Popen(expr, shell=True) 

如果我從命令行啓動我的python程序,一切都很好。需要注意的是,jar文件將在jar文件的同一路徑中創建一個SMCIPMITool.properties。我的問題是,我想運行我的Python程序作爲服務。當我啓動服務時,python程序執行得很好,但是這個調用有問題。我的python程序捕獲這個程序不會崩潰,所以它會反覆嘗試執行此操作。從Java文件的輸出進入上面的文件,看起來像這樣:

java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied) 
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory) 

請記住,這不是(由超微預編譯)我的jar文件,所以我必須在Java代碼無法控制。看起來,運行在「service land」中的java文件要麼嘗試將.properties文件寫入到它沒有寫權限的位置,和/或找不到.properties文件。另外需要注意的是,jar和.properties文件都存在於同一個目錄中。看起來,當jar文件在「service land」中執行時,它可能實際上並未在jar文件所在的目錄中執行。

當我調用java -jar時,是否可以明確指定.properties文件的路徑?有沒有辦法在JRE中設置默認路徑爲.properies文件?我在接下來的步驟中有點不知所措,而谷歌沒有幫助。任何幫助將不勝感激!

使用實際代碼的複製粘貼編輯。 cmmTool變量包含/ path/to/jar/jar文件

+1

我假設你只是忘記了'expr =「...」'引號',是嗎? –

+0

您可以嘗試使用''SMCIPMITool.jar「'而不是'/ path/to/jar /''並調用'subprocess.Popen(expr,cwd ='/ path/to/jar',shell = True) '它可能會影響服務創建或寫入文件的位置。 –

+0

啊,是的,對不起,我爲這個問題重寫了我的python代碼。 Python代碼工作正常。正如我所說,我已經多次運行它從命令行啓動它沒有問題。我會嘗試你的cwd建議並回報。 – user1777820

回答

0

已解決。需要將我的服務運行路徑更改爲jar文件和.properties文件所在的位置。看起來,當我之前啓動jar文件時,它實際上是在與文件所在位置不同的位置執行的。因此無法找到.properties文件在同一目錄中。這裏是我的/etc/init/myservice.conf樣子(反正重要的部分...程序的.conf前面部分有一些東西我不應該分享):

chdir /svbase/ 
expect fork 

script 
    exec /usr/bin/python /svbase/smapp/Main.py /svbase/config/product/smapp.xml & 
end script 

也就是說第一行是必要的將服務的運行位置更改爲jar文件和.properties文件所在的位置。