【问题标题】:Specify path to java properties path at runtime在运行时指定 java 属性路径的路径
【发布时间】:2013-06-24 16:52:45
【问题描述】:

如果这个问题已经得到解答,我提前道歉,但我找不到任何与此相关的具体内容。我有一个 python 程序,它在运行时启动一个子进程,它调用一个 java jar 文件。该命令如下所示:

# 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 文件(由 super micro 预编译),所以我无法控制 java 代码。似乎在“服务区”中运行的 java 文件正在尝试将 .properties 文件写入它没有写入权限的位置,和/或找不到 .properties 文件。还要注意,jar 和 .properties 文件都存在于同一目录中。似乎当 jar 文件在“服务域”中执行时,它实际上可能并未在 jar 文件所在的目录中执行。

当我调用 java -jar 时,是否可以明确指定 .properties 文件的路径?有没有办法以某种方式在 JRE 中设置 .properies 文件的默认路径?我对接下来的步骤有点不知所措,谷歌也没有帮助。任何帮助将不胜感激!

使用实际代码的复制粘贴进行编辑。 cmmTool 变量包含 /path/to/jar/jarFile

【问题讨论】:

  • 我假设您只是忘记了 expr="..." 周围的引号,是吗?
  • 您可以尝试使用"SMCIPMITool.jar" 而不是'/path/to/jar/' 并调用subprocess.Popen(expr, cwd='/path/to/jar', shell=True),这可能会影响服务创建或写入文件的位置。
  • 啊,是的,对不起,我为这个问题即时重写了我的 python 代码。 python代码工作正常。正如我所说,我已经多次运行它从命令行启动它而没有问题。我会尝试你推荐的 cwd 并报告。
  • 然后粘贴工作 python 代码。 SO用户一般都很熟练,你不会用伪代码欺骗他们:p
  • 已更新以摆脱“伪代码”,我认为这可能更清楚。 Ryan 使用 cwd='path/to/jar' 的建议没有奏效。同样的错误。

标签: java python service properties subprocess


【解决方案1】:

解决了。需要将我的服务运行路径更改为 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 文件所在的位置所必需的。

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多