Есть ли способ проверить, какой процессор имеет компьютер через строку кода Python [duplicate]

На самом деле, вы должны использовать управляемые объекты JVM или Spring-managed Object для вызова методов. из вашего вышеуказанного кода в классе контроллера вы создаете новый объект для вызова своего класса обслуживания, у которого есть объект с автоматической проводкой.

MileageFeeCalculator calc = new MileageFeeCalculator();

, поэтому он не будет работать таким образом.

Решение делает этот MileageFeeCalculator как объект с автоматической проводкой в ​​самом контроллере.

Измените свой класс контроллера, как показано ниже.

@Controller
public class MileageFeeController {

    @Autowired
    MileageFeeCalculator calc;  

    @RequestMapping("/mileage/{miles}")
    @ResponseBody
    public float mileageFee(@PathVariable int miles) {
        return calc.mileageCharge(miles);
    }
}
18
задан user225312 30 January 2011 в 11:54
поделиться

9 ответов

Похоже, что отсутствующий скрипт в ответе @Spacedman находится здесь:

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

Он исправлен для работы с Python 3.

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

Структура данных действительно зависит от ОС, в Windows это выглядит так:

>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}

В Linux это другое:

# 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'}
1
ответ дан anatoly techtonik 21 August 2018 в 04:38
поделиться

Я попробовал различные решения здесь. cat /proc/cpuinf дает огромное количество результатов для многоядерной машины, много страниц длиннее platform.processor(), кажется, дает вам очень мало. Используя Linux и Python 3, следующее возвращает полезное резюме около двадцати строк:

import subprocess
print((subprocess.check_output("lscpu", shell=True).strip()).decode())
3
ответ дан cardamom 21 August 2018 в 04:38
поделиться

Вот хакерский бит кода, который должен последовательно находить имя процессора на трех платформах, у которых есть разумный опыт.

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 ""
6
ответ дан dbn 21 August 2018 в 04:38
поделиться

Для Linux и обратной совместимости с Python (не у всех есть cpuinfo), вы можете проанализировать через /proc/cpuinfo напрямую. Чтобы получить скорость процессора, попробуйте:

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

Обратите внимание на необходимое использование \s для пробелов ... /proc/cpuinfo на самом деле имеет символы табуляции, и я работал в течение нескольких часов с sed до тех пор, пока я придумал:

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

Мне не хватало \t, и это сбило меня с ума, потому что я либо сопоставил весь файл, либо ничего.

Попробуйте аналогичные регулярные выражения для других полей вам нужно:

# Take any string after the specified field name and colon.
re.search("field name\s*: (.+)", cpuinfo_content)  
0
ответ дан Josh Detwiler 21 August 2018 в 04:38
поделиться

В случае if-case для платформы Windows i.e platform.processor () просто указывается описание или фамилия процессора, например. Intel64 Family 6 Model 60 Stepping 3.

Я использовал:

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

, чтобы получить фактическую модель процессора, которая является тем же самым выходом, что и if-blocks для Darwin и Linux, например Intel (R) Core (TM) i7-4790K CPU @ 4.00GHz Intel64 Family 6 Model 60 Stepping 3, GenuineIntel

1
ответ дан oche 21 August 2018 в 04:38
поделиться

Рабочий код (дайте мне знать, если это не сработает для вас):

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 ""
4
ответ дан Phil L. 21 August 2018 в 04:38
поделиться
  • 1
    В python3 subprocess не будет возвращать str, но byte. Вы должны преобразовать его в str с your_byte.decode('utf-8'). Например, для Дарвина код будет model = subprocess.check_output(["/usr/sbin/sysctl", "-n", "machdep.cpu.brand_string"]).strip() ; return model.decode('utf-8'). – lenooh 9 March 2018 в 18:00

Для удобного использования вы можете использовать cpuinfo .

Установить как pip install py-cpuinfo

Использовать из командной строки: python -m cpuinfo

Код:

import cpuinfo
cpuinfo.get_cpu_info()['brand']
9
ответ дан serv-inc 21 August 2018 в 04:38
поделиться
  • 1
    Извините, мне нужно было имя, я должен был упомянуть – user225312 30 January 2011 в 11:53
  • 2
    Как добавить имя. – Spacedman 30 January 2011 в 12:28
  • 3
    Ссылка кажется сломанной, и поиск cpuinfo на этом веб-сайте приносит много результатов. не могли бы вы поместить название проекта / ссылку на код – Moh Zah 28 July 2013 в 20:13
  • 4
    @Moh Zah, я считаю, этот должен быть ссылкой на проект. – istern 16 March 2016 в 16:53
  • 5
    Хотите увидеть мой Microchannel PS / 2 с процессорами 286 и 386? ;) – Yann Vernier 8 April 2018 в 14:18

Функция platform.processor () возвращает имя процессора как строку.

>>> import platform
>>> platform.processor()
'Intel64 Family 6 Model 23 Stepping 6, GenuineIntel'
23
ответ дан user225312 21 August 2018 в 04:38
поделиться
  • 1
    может ли кто-нибудь сказать, является ли это независимым от платформы выходом. то есть. всегда ли он дает тот же самый результат для одного и того же CPU на windows / linux / osx? – John La Rooy 30 January 2011 в 12:22
  • 2
    Он возвращает пустую строку в моей системе (python 2.6.5 в Ubuntu) ... – Spacedman 30 January 2011 в 12:30
  • 3
    @gnibbler: Есть ли основания сомневаться в том, что выход может отличаться? Хотя я надеюсь, что кто-то сможет подтвердить это. – user225312 30 January 2011 в 12:31
  • 4
    @Spacedman: «Пустая строка возвращается, если значение не может быть определено. & Quot; Иметь такую ​​же проблему. – gorlum0 30 January 2011 в 13:02
  • 5
    Я думаю, что реальный вопрос заключается в том, что OP хочет получить имя процессора. Названия процессоров были простыми вплоть до первых Pentium, затем появился AMD, и все остальные начали создавать аналогичные процессоры, и теперь каждая скорость процессора имеет другое имя, а затем у вас есть несколько процессоров и ядер и так далее ... Если «имя» сжигается в кремнии, тогда каждая ОС может представлять его в любой нужной строке. – Spacedman 30 January 2011 в 13:14
9
ответ дан serv-inc 31 October 2018 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: