python processor

Obteniendo información del procesador en Python



processor (9)

Aquí hay un código:

https://github.com/pydata/numexpr/blob/master/numexpr/cpuinfo.py

es muy dependiente del sistema operativo, por lo que hay muchas ramas if. Pero sí funciona todas las capacidades de la CPU.

$ python cpuinfo.py CPU information: getNCPUs=2 has_mmx has_sse has_sse2 is_64bit is_Intel is_Pentium is_PentiumIV

Para linux, busca en / proc / cpuinfo e intenta usar uname. Para Windows parece que usa el registro.

Para obtener el [primer] nombre del procesador usando este módulo:

>>> import cpuinfo >>> cpuinfo.cpu.info[0][''model name''] ''Intel(R) Pentium(R) 4 CPU 3.60GHz''

Si tiene más de un procesador, los elementos de cpuinfo.cpu.info tendrán sus nombres. Sin embargo, no creo que haya visto una PC con dos procesadores diferentes (no desde la década de los 80, cuando podrías obtener un coprocesador Z80 para tu 6502 CPU BBC Micro ...)

Usando Python hay alguna forma de averiguar la información del procesador ... (Necesito el nombre)

Necesito el nombre del procesador en el que se ejecuta el intérprete. Revisé el módulo sys pero no tiene tal función.

Puedo usar una biblioteca externa también si es necesario.


Aquí hay un fragmento de código que debería encontrar el nombre del procesador en las tres plataformas en las que tengo experiencia razonable.

import os, platform, subprocess, re def get_processor_name(): if platform.system() == "Windows": return platform.processor() elif platform.system() == "Darwin": os.environ[''PATH''] = os.environ[''PATH''] + os.pathsep + ''/usr/sbin'' command ="sysctl -n machdep.cpu.brand_string" return subprocess.check_output(command).strip() elif platform.system() == "Linux": command = "cat /proc/cpuinfo" all_info = subprocess.check_output(command, shell=True).strip() for line in all_info.split("/n"): if "model name" in line: return re.sub( ".*model name.*:", "", line,1) return ""


Código de trabajo (avíseme si esto no funciona para usted):

import platform, subprocess def get_processor_info(): if platform.system() == "Windows": return platform.processor() elif platform.system() == "Darwin": return subprocess.check_output([''/usr/sbin/sysctl'', "-n", "machdep.cpu.brand_string"]).strip() elif platform.system() == "Linux": command = "cat /proc/cpuinfo" return subprocess.check_output(command, shell=True).strip() return ""


El if-cases para Windows es decir, platform.processor () solo proporciona la descripción o el nombre del procesador, por ejemplo, Intel64 Family 6 Model 60 Stepping 3.

Solía:

if platform.system() == "Windows": family = platform.processor() name = subprocess.check_output(["wmic","cpu","get", "name"]).strip().split("/n")[1] return '' ''.join([name, family])

para obtener el modelo de cpu real que es el mismo resultado que los bloques if para Darwin y Linux, por ejemplo, CPU Intel® Core7 (7) 477KK a 4.00 GHz Intel64 Family 6 Model 60 Stepping 3, GenuineIntel


La función platform.processor() devuelve el nombre del procesador como una cadena.

>>> import platform >>> platform.processor() ''Intel64 Family 6 Model 23 Stepping 6, GenuineIntel''


Para Linux, y la compatibilidad con Python (no todos tienen cpuinfo ), puede analizar directamente a través de /proc/cpuinfo . Para obtener la velocidad del procesador, intente:

# Take any float trailing "MHz", some whitespace, and a colon. speeds = re.search("MHz/s*: (/d+/.?/d*)", cpuinfo_content)

Tenga en cuenta el uso necesario de /s para el espacio en blanco ... /proc/cpuinfo realidad tiene caracteres de tabulación y trabajé durante horas trabajando con sed hasta que se me ocurrió:

sed -rn ''s/cpu MHz[ /t]*: ([0-9]+/.?[0-9]*)//1/gp'' /proc/cpuinfo

Me faltaba el /t y me volvía loca porque, o bien hacía coincidir todo el archivo o nada.

Intente expresiones regulares similares para los otros campos que necesita:

# Take any string after the specified field name and colon. re.search("field name/s*: (.+)", cpuinfo_content)


Para un paquete fácil de usar, puede usar cpuinfo .

Instalar como pip install py-cpuinfo

Use desde la línea de comandos: python -m cpuinfo

Código:

import cpuinfo cpuinfo.get_cpu_info()[''brand'']


Parece que el script que falta en la respuesta de @Spacedman está aquí:

https://github.com/pydata/numexpr/blob/master/numexpr/cpuinfo.py

Está parcheado para trabajar con Python 3.

>python cpuinfo.py CPU information: CPUInfoBase__get_nbits=32 getNCPUs=2 has_mmx is_32bit is_Intel is_i686

La estructura de los datos es, de hecho, dependiente del sistema operativo, en Windows se ve así:

>python -c "import cpuinfo, pprint; pprint.pprint(cpuinfo.cpu.info[0])" {''Component Information'': ''/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x01/x00/x00/x00'', ''Configuration Data'': ''/xff/xff/xff/xff/xff/xff/xff/xff/x00/x00/x00/x00/x00/x00/x00/x00'', ''Family'': 6, ''FeatureSet'': 2687451135L, ''Identifier'': u''x86 Family 6 Model 23 Stepping 10'', ''Model'': 23, ''Platform ID'': 128, ''Previous Update Signature'': ''/x00/x00/x00/x00/x0c/n/x00/x00'', ''Processor'': ''0'', ''ProcessorNameString'': u''Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz'', ''Stepping'': 10, ''Update Signature'': ''/x00/x00/x00/x00/x0c/n/x00/x00'', ''Update Status'': 2, ''VendorIdentifier'': u''GenuineIntel'', ''~MHz'': 2394}

En Linux es diferente:

# python -c "import cpuinfo, pprint; pprint.pprint(cpuinfo.cpu.info[0])" {''address sizes'': ''36 bits physical, 48 bits virtual'', ''apicid'': ''0'', ''bogomips'': ''6424.11'', ''bugs'': '''', ''cache size'': ''2048 KB'', ''cache_alignment'': ''128'', ''clflush size'': ''64'', ''core id'': ''0'', ''cpu MHz'': ''2800.000'', ''cpu cores'': ''2'', ''cpu family'': ''15'', ''cpuid level'': ''6'', ''flags'': ''fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm const ant_tsc pebs bts nopl pni dtes64 monitor ds_cpl est cid cx16 xtpr pdcm lahf_lm'', ''fpu'': ''yes'', ''fpu_exception'': ''yes'', ''initial apicid'': ''0'', ''microcode'': ''0xb'', ''model'': ''6'', ''model name'': ''Intel(R) Pentium(R) D CPU 3.20GHz'', ''physical id'': ''0'', ''power management'': '''', ''processor'': ''0'', ''siblings'': ''2'', ''stepping'': ''5'', ''uname_m'': ''x86_64'', ''vendor_id'': ''GenuineIntel'', ''wp'': ''yes''}


Probé varias soluciones aquí. cat /proc/cpuinf proporciona una gran cantidad de salida para una máquina multinúcleo, muchas páginas de largo, platform.processor() parece darle muy poco. Usando Linux y Python 3, lo siguiente devuelve un resumen bastante útil de unas veinte líneas:

import subprocess print((subprocess.check_output("lscpu", shell=True).strip()).decode())