Hello,

I found a much easier to detect the path to JAVA_HOME on Unix-like
platforms where the java command is in the search path. "java -verbose"
prints out the paths of all loaded JAR files.

Christian

---
import subprocess
import re
import os

PATH_RE = re.compile("Loaded\ .*\ from\ (.*)/jre/lib/rt.jar")

def find_java():
    """Find java home by running java -verbose

    In verbose mode, java prints lines like

        [Loaded java.lang.Object from
/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/rt.jar]

    to stdout.
    """
    try:
        proc = subprocess.Popen(["java", "-verbose"],
                                stdout=subprocess.PIPE)
    except OSError:
        return None
    out, err = proc.communicate()
    for line in out.split("\n"):
        mo = PATH_RE.search(line)
        if mo is None:
            continue
        javahome = mo.group(1)
        if os.path.isdir(javahome):
            return javahome

if __name__ == "__main__":
    print find_java()
---

Reply via email to