由于平台之间文件的位置和名称不同,而且似乎没有指向它的环境变量,我想你最好的选择是在文件系统中查找文件:
#!/usr/bin/env python
import subprocess
import re
rtjarPaths = subprocess.check_output(["locate", "rt.jar"])
paths = re.findall('^.*/jre/.*$', rtjarPaths, re.M)
print paths
vicent@deckard:~$ python findrt.py
['/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar']
上面的代码在我的 Ubuntu 机器上对我来说很好。它也可以轻松扩展以在 MacOS X 上工作。其他 linux 发行版也可能需要修改代码。
更新:
经过一番谷歌搜索后,我在 oracle 文档中发现该rt.jar
文件位于存储在sun.boot.class.path
系统属性中的路径中。不幸的是,我不知道如何直接从 Python 或命令行获取此属性,因此我只能提供以下肮脏的替代方法来替代前面的代码。
创建并编译 PropertiesTest.java:
public class PropertiesTest {
public static void main(String[] args)
throws Exception {
String value = System.getProperty("sun.boot.class.path");
System.out.println(value);
}
}
然后执行以下 Python 脚本:
#!/usr/bin/env python
import subprocess
import re
jrePaths = subprocess.check_output(["java", "PropertiesTest"])
rt = re.findall('(?:.*:)?(.*/(?:rt|classes)\.jar):?', jrePaths)
print rt
它应该适用于 Linux 和 MacOS X 平台。在我的 Ubuntu 系统上,它给出了输出
['/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar']