[\"\']?)(?P.*)(?P=quote)$" ) # unescape five special characters mentioned in the standard os_release_unescape = re.compile(r"\\([\\\$\"\'`])") for line in lines: mo = os_release_line.match(line) if mo is not None: info[mo.group('name')] = os_release_unescape.sub( r"\1", mo.group('value') ) return info def freedesktop_os_release(): """Return operation system identification from freedesktop.org os-release """ global _os_release_cache if _os_release_cache is None: errno = None for candidate in _os_release_candidates: try: with open(candidate, encoding="utf-8") as f: _os_release_cache = _parse_os_release(f) break except OSError as e: errno = e.errno else: raise OSError( errno, f"Unable to read files {', '.join(_os_release_candidates)}" ) return _os_release_cache.copy() ### Command line interface if __name__ == '__main__': # Default is to print the aliased verbose platform string terse = ('terse' in sys.argv or '--terse' in sys.argv) aliased = (not 'nonaliased' in sys.argv and not '--nonaliased' in sys.argv) print(platform(aliased, terse)) sys.exit(0)