1import platform
2import sys
3
4
5def get_cpu():
6    result = {}
7
8    # Operating system
9    result['platform'] = sys.platform
10    result['windows'] = result['platform'] == 'win32'
11    result['linux'] = result['platform'].startswith('linux')
12    result['mac'] = result['platform'] == 'darwin'
13    result['release'] = platform.release().lower()
14    result['binext'] = '.exe' if result['windows'] else ''
15
16    # Number of bits
17    result['bitness'] = '64' if platform.machine().endswith('64') or sys.maxsize > 2**32 else '32'
18
19    # Instruction sets
20    try:
21        info = ''
22        with open('/proc/cpuinfo') as f:
23            info = f.read()
24        result['popcnt'] = 'popcnt' in info
25        result['bmi2'] = 'bmi2' in info
26    except OSError:
27        # Logic not fully true
28        guess = (result['bitness'] == '64')
29        result['popcnt'] = guess
30        result['bmi2'] = guess
31    return result
32