2013-06-24 132 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文件所在的位置。