Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/circuits/core/manager.py", line 661, in _dispatcher
value = event_handler(*eargs, **ekwargs)
File "bin/sdk", line 18, in started
helpCommandModule = __import__("sdk.HelpCommand").HelpCommand
File "/home/robert_/pyx/Projects/buildsys/lib/sdk/HelpCommand.py", line 2, in <module>
import sdk.PlatformInfo, configparser, re, pastel
File "/home/robert_/pyx/Projects/buildsys/lib/sdk/PlatformInfo.py", line 103, in <module>
processors = logical_processors()
File "/home/robert_/pyx/Projects/buildsys/lib/sdk/PlatformInfo.py", line 83, in logical_processors
props = dict((re.sub(r'_([\sa-zA-Z0-9])', lambda x: x.group(1).upper(), key.strip().replace(' ', '_')), \
File "/home/robert_/pyx/Projects/buildsys/lib/sdk/PlatformInfo.py", line 86, in <genexpr>
for key, value in (line.split(':') for line in processorInfo.split('\n')))
ValueError: not enough values to unpack (expected 2, got 1)
Last active
February 7, 2020 17:16
-
-
Save lighth7015/d469b3328ee5859ea8e965b315e10acc to your computer and use it in GitHub Desktop.
ProcessorInfo.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os.path, re | |
from typing import List | |
""" Query processor info (UNIX/win32)""" | |
isfloat = lambda value: len(tuple(it for it in str(value.strip()).partition('.') if len(it) > 0)) == 3 | |
tofloat = lambda value: float(str(value).strip()) if isfloat(value) else None | |
tofloatif = lambda value: tofloat(value) or value | |
class LogicalProcessor(object): | |
def __init__(self, args) -> None: | |
self.processor = args.get('processor', '') | |
self.vendor = args.get('vendorId', '') | |
self.family = args.get('cpuFamily', -1) | |
self.model = args.get('cpuModel', -1) | |
self.modelName = args.get('modelName', '') | |
self.stepping = args.get('stepping', -1) | |
self.microcode = args.get('microcode', -1) | |
self.cpuFreq = args.get('cpuFreq', -1.0) | |
self.scaleUnit = '' | |
self.cacheSize = args.get('cacheSize', -1) | |
self.processorId = args.get('processorId', -1) | |
self.siblings = args.get('siblings', -1) | |
self.core = args.get('coreId', -1) | |
self.apicId = args.get('apicid', -1) | |
self.initialApicId = args.get('initialApicid', -1) | |
self.fpu = args.get('fpu', False) | |
self.fpuException = args.get('fpuException', False) | |
self.cpuIdLevel = args.get('cpuidLevel', -1) | |
self.wp = args.get('wp', False) | |
self.flags: List[str] = args.get('flags', '').split(' ') | |
self.bogoMips = args.get('bogoMips', -1.0) | |
self.clflushSize = args.get('clflushSize', -1) | |
self.cacheAlignment = args.get('cacheAlignment', -1) | |
# physical-addr bits, virt-addr bits. | |
if addresses := args.get( 'addressSize', False ): | |
self.addressSizes = tuple(int(numBits.partition(' ')[0]) for numBits in addresses.split(', ')) | |
else: | |
self.addressSizes = ( 0, 0 ) | |
def __str__(self): | |
return ('<%s %s vendor=%s processorFamily=%s ' | |
'model=%s modelName=%s stepping=%s microcode=%s ' | |
'cpuFreq=%d %s cacheSize=%s processorId=%s siblings=%s ' | |
'core=%s logicalNum=%s apicId=%s initialApicId=%s ' | |
'fpu=%s fpuException=%s cpuIdLevel=%s ' | |
'wp=%s flags=%s bogoMips=%s ' | |
'clflushSize=%s cacheAlignment=%s addressSize=%s>' % ( | |
self.__name__, | |
self.processor, | |
self.vendor, | |
self.processorFamily, | |
self.model, | |
self.modelName, | |
self.stepping, | |
self.microcode, | |
self.cpuFreq, | |
self.scaleUnit, | |
self.cacheSize, | |
self.processorId, | |
self.siblings, | |
self.core, | |
self.apicId, | |
self.initialApicId, | |
self.fpu, | |
self.fpuException, | |
self.cpuIdLevel, | |
self.wp, | |
self.flags, | |
self.bogoMips, | |
self.clflushSize, | |
self.cacheAlignment, | |
self.addressSizes)) | |
def logical_processors() -> List[LogicalProcessor]: | |
cbFrequencyConv = lambda value: result if (result := ((frequency / 1000000000) * 1000)) > 0 else value | |
processors: List[LogicalProcessor] = [] | |
processor: LogicalProcessor = None | |
cpuinfo_max_freq_path = '/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq' | |
with open('/proc/cpuinfo') as f: | |
for processorInfo in f.read().split("\n\n"): | |
props = dict((re.sub(r'_([\sa-zA-Z0-9])', lambda x: x.group(1).upper(), key.strip().replace(' ', '_')), \ | |
int(value.strip()) if value.strip().isnumeric() else \ | |
tofloatif(value.strip())) \ | |
for key, value in (line.split(':') for line in processorInfo.split('\n'))) | |
print() | |
print(( processorInfo, props )) | |
if os.path.exists(( pathname := cpuinfo_max_freq_path %(int( processor.processorId )))): | |
with open(pathname) as fh: | |
processor.cpuFreq = float(cbFrequencyConv(frequency := int( fh.read( )))) | |
processor.scaleUnit = 'MHz' if processor.cpuFreq > 1000 else 'GHz' | |
processors.append(processor) | |
print(processors) | |
return processors | |
processors = logical_processors() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment