ファイルの場所と名前はプラットフォームによって異なり、それを指す環境変数がないように見えるため、ファイルシステムでファイルを探すのが最善の策だと思います。
#!/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']