6

Is there an existing python module that can be used to detect which distro of Linux and which version of the distro is currently installed.

For example:

  • RedHat Enterprise 5
  • Fedora 11
  • Suse Enterprise 11
  • etc....

I can make my own module by parsing various files like /etc/redhat-release but I was wondering if a module already exists?

Cheers, Ivan

1

4 Answers 4

19

Look up the docs for the platform module: http://docs.python.org/library/platform.html

Example:

>>> platform.uname()
('Linux', 'localhost', '2.6.31.5-desktop-1mnb', '#1 SMP Fri Oct 23 00:05:22 EDT 2009', 'x86_64', 'AMD Athlon(tm) 64 X2 Dual Core Processor 3600+')
>>> platform.linux_distribution()
('Mandriva Linux', '2010.0', 'Official')
Sign up to request clarification or add additional context in comments.

2 Comments

Both functions are deprecated
Not sure that uname is, but linux_distribution definitely is, details -> bugs.python.org/issue1322
3

I've written a package called distro (now used by pip) which aims to replace distro.linux_distribution. It works on many distributions which might return weird or empty tuples when using platform.

https://github.com/nir0s/distro (distro, on pypi)

It provides a much more elaborate API to retrieve distribution related information.

$ python
Python 2.7.12 (default, Nov  7 2016, 11:55:55) 
[GCC 6.2.1 20160830] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import distro
>>> distro.linux_distribution()
(u'Antergos Linux', '', u'ARCHCODE')

By the way, platform.linux_distribution is to be removed in Python 3.7.

Comments

2

The above answer doesn't work on RHEL 5.x. The quickest way is on a redhat-like system is to read and look at the /etc/redhat-release file. This file is updated every time you run an update and the system gets upgraded by a minor release number.

$ python
>>> open('/etc/redhat-release','r').read().split(' ')[6].split('.')
['5', '5']

If you take the split parts out it will just give you string. No module like you asked, but I figured it was short and elegant enough that you may find it useful.

Comments

0

Might not be the best way, but I used subprocess to execute 'uname -v' and then looked for the distro name in the output.

import subprocess
process = subprocess.Popen(['uname','-v'], stdout=subprocess.PIPE)
stdout = process.communicate()[0]
distro = format(stdout).rstrip("\n")

if 'FreeBSD' in distro:
   print "It's FreeBSD"
elif 'Ubuntu' in distro:
   print "It's Ubuntu"
elif 'Darwin' in distro:
   print "It's a Mac"
else:
   print "Unknown distro"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.