def process_ia32(): data = {} cores = [] for cpu in open('/proc/cpuinfo').read().split('\n\n'): if not len(cpu): continue core = {} for attr in cpu.split('\n'): k,v = [a.strip() for a in attr.split(':',1)] for key,val in (('phyid', 'physical id'), ('coreid', 'core id')): if k == val: core[key] = v continue for key,val in (('type', 'vendor_id'), ('model', 'model_name'), ('model_number', 'cpu family'), ('model_ver', 'model'), ('cpu_stepping', 'stepping'), ('cpu_family', 'cpu family'), ('cpu_model_num', 'model'), ('cache', 'cache size'), ('bogomips', 'bogomips'), ('other', 'flags'), ('speed', 'cpu MHz')): if k == val: data[key] = v if len(core): core = tuple([int(core[a]) for a in ('phyid','coreid')]) if core not in cores: cores.append(core) else: cores.append(()) if data['speed'] == "": data['speed'] = -1 else: try: data['speed'] = int(round(float(data['speed'])) - 1) except: data['speed'] = -1 data['count'] = len(cores) return data if __name__ == '__main__': for k,v in process_ia32().items(): print '{0:>20} : {1}'.format(k,v)