Get java version number from python
Solution 1:
The Java runtime seems to send the version information to the stderr. You can get at this using Python's subprocess
module:
>>> import subprocess
>>> version = subprocess.check_output(['java', '-version'], stderr=subprocess.STDOUT)
>>> print version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) Client VM (build 24.79-b02, mixed mode)
You can get the version out with a regex:
>>> import re
>>> pattern = '\"(\d+\.\d+).*\"'
>>> print re.search(pattern, version).groups()[0]
1.7
If you are using a pre-2.7 version of Python, see this question: subprocess.check_output() doesn't seem to exist (Python 2.6.5)
Solution 2:
Considering an output like this:
$ java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
You can get the version number with awk
like this:
$ java -version 2>&1 | awk -F[\"_] 'NR==1{print $2}'
1.8.0
Or, if you just want the first two .
-separated digits:
$ java -version 2>&1 | awk -F[\"\.] -v OFS=. 'NR==1{print $2,$3}'
1.8
Here, awk
sets the field separator to either "
or _
(or .
), so that the line is sliced in pieces. Then, it prints the 2nd field on the first line (indicated by NR==1
). By setting OFS
we indicate what is the output field separator, so that saying print $2, $3
prints the 2nd field followed by the 3rd one with a .
in between.
To use it in Python you need to escape properly:
>>> os.system('java -version 2>&1 | awk -F[\\\"_] \'NR==1{print $2}\'')
1.8.0
>>> os.system('java -version 2>&1 | awk -F[\\\"\.] -v OFS=. \'NR==1{print $2,$3}\'')
1.8