#!/usr/bin/env python def distro_from_os_release(): """ determine the distribution from the file /etc/os-release """ dist_id = '' dist_version = '' try: for line in open('/etc/os-release'): name, value = line.split('=') value = value.strip().strip('"').strip("'") if name == 'ID': dist_id = value elif name == 'VERSION_ID': dist_version = value except IOError: pass except ValueError: pass return dist_id, dist_version def targetplatform(): try: # Python >= 2.6 have platform.linux_distribution import platform system = platform.system() machine = platform.machine() if system == 'Darwin': mach = platform.architecture()[0] if mach == '32bit' and not machine.startswith('i'): machine = 'i386' elif mach == '64bit' and machine in ['i386', 'i686']: machine = 'x86_64' # Python >= 3.8 does NOT have platform.linux_distribution distro = None if hasattr(platform, 'linux_distribution'): distribution = platform.linux_distribution(full_distribution_name=0)[:2] else: try: from aweremoterepo import distro except: import distro distribution = distro.linux_distribution(full_distribution_name=0)[:2] if distribution[1].find('.') == -1: distribution = (distribution[0], distro.lsb_release_info()['release']) if distribution[0] == 'scientific': distribution = ('redhat', distribution[1]) if distribution[0] == 'centos': # check for microversion if distribution[1].find('.') == -1 and distro: distribution = (distribution[0], distro.lsb_release_info()['release']) distribution = (distribution[0], '.'.join(distribution[1].split('.')[:2])) if distribution[0] == 'Ubuntu': # to undo the Ubuntu mods! import os def linux_distribution(distname='', version='', id='', supported_dists=platform._supported_dists, full_distribution_name=1): try: etc = os.listdir('/etc') except os.error: # Probably not a Unix system return distname,version,id etc.sort() for file in etc: m = platform._release_filename.match(file) if m is not None: _distname,dummy = m.groups() if _distname in supported_dists: distname = _distname break else: return platform._dist_try_harder(distname,version,id) # Read the first line f = open('/etc/'+file, 'r') firstline = f.readline() f.close() _distname, _version, _id = platform._parse_release_file(firstline) if _distname and full_distribution_name: distname = _distname if _version: version = _version if _id: id = _id return distname, version, id distribution = linux_distribution(full_distribution_name=0)[:2] # if distribution info can not be determined, use /etc/os-release if distribution[0] == '' and distribution[1] == '': distribution = distro_from_os_release() except ImportError: # Python version < 2.4 do not have platform import os system = os.uname()[0] machine = os.uname()[-1] distribution = ('', '') except AttributeError: # Python >= 2.4 and < 2.6 for Linux have platform.dist try: # Python >= 2.4 and < 2.6 for Linux distribution = platform.dist()[:2] if distribution[0] == 'redhat': # to make this compatible with Python >= 2.6 import os if os.path.exists('/etc/fedora-release'): distribution = ('fedora', distribution[1]) except AttributeError: # Python >= 2.4 and < 2.6 non-Linux pass if distribution == ('', ''): result = (system, machine) else: result = (system, '-'.join(distribution), machine) return '-'.join(result).replace('/','.') if __name__ == '__main__': import sys print(targetplatform()) sys.exit(0)