Как узнать процессор python
На самом деле, вы должны использовать управляемые объекты JVM или Spring-managed Object для вызова методов. из вашего вышеуказанного кода в классе контроллера вы создаете новый объект для вызова своего класса обслуживания, у которого есть объект с автоматической проводкой.
, поэтому он не будет работать таким образом.
Решение делает этот MileageFeeCalculator как объект с автоматической проводкой в самом контроллере.
Измените свой класс контроллера, как показано ниже.
Похоже, что отсутствующий скрипт в ответе @Spacedman находится здесь:
Он исправлен для работы с Python 3.
Структура данных действительно зависит от ОС, в Windows это выглядит так:
В Linux это другое:
Я попробовал различные решения здесь. cat /proc/cpuinf дает огромное количество результатов для многоядерной машины, много страниц длиннее platform.processor() , кажется, дает вам очень мало. Используя Linux и Python 3, следующее возвращает полезное резюме около двадцати строк:
Вот хакерский бит кода, который должен последовательно находить имя процессора на трех платформах, у которых есть разумный опыт.
Для Linux и обратной совместимости с Python (не у всех есть cpuinfo ), вы можете проанализировать через /proc/cpuinfo напрямую. Чтобы получить скорость процессора, попробуйте:
Обратите внимание на необходимое использование \s для пробелов . /proc/cpuinfo на самом деле имеет символы табуляции, и я работал в течение нескольких часов с sed до тех пор, пока я придумал:
Мне не хватало \t , и это сбило меня с ума, потому что я либо сопоставил весь файл, либо ничего.
Попробуйте аналогичные регулярные выражения для других полей вам нужно:
В случае if-case для платформы Windows i.e platform.processor () просто указывается описание или фамилия процессора, например. Intel64 Family 6 Model 60 Stepping 3.
, чтобы получить фактическую модель процессора, которая является тем же самым выходом, что и if-blocks для Darwin и Linux, например Intel (R) Core (TM) i7-4790K CPU @ 4.00GHz Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
I want to know the number of CPUs on the local machine using Python. The result should be user/real as output by time(1) when called with an optimally scaling userspace-only program.
You should keep cpusets (in Linux) in mind. If you're in a cpuset, the solutions below will still give the number of real CPUs in the system, not the number available to your process. /proc/
Создаем основу программы
Для отправки данных я решил воспользоваться Telegram-ботом. Создать его ты можешь через BotFather, а после сохранить token твоего творения. Публиковать его нельзя — любой, кто получит этот токен, сможет захватить контроль над твоим ботом.
Для подключения к Bot API «телеги» нужны всего две строчки:
Чтобы оценить быстродействие, можно написать еще пару строк. Весь дальнейший код расположим между ними. Описанное выше подключение бота уже вписано сюда.
Функции платформы Mac OS.
platform.mac_ver(release='', versioninfo=('', '', ''), machine='') :
Функция platform.mac_ver() Получите информацию о версии Mac OS и возвращает ее как кортеж (release, versioninfo, machine) , а versioninfo так-же является кортежем (version, dev_stage, non_release_version) .
Записи, которые не могут быть определены, выводятся как пустая строка '' . Все записи кортежа являются строками.
Кроссплатформенные функции.
platform.architecture(executable=sys.executable, bits='', linkage='') :
Функция platform.architecture() запрашивает исполняемый файл executable для получения различной информации об архитектуре. По умолчанию двоичный файл интерпретатора Python.
Возвращает кортеж (bits, linkage), который содержит информацию об архитектуре битов и формате связи, используемом для исполняемого файла. Оба значения возвращаются в виде строк.
Значения, которые не могут быть определены, возвращаются в соответствии с предустановками параметров. Если биты заданы как '' , то sizeof(pointer) используется в качестве индикатора для поддерживаемого размера указателя.
Функция полагается на системную команду file для выполнения реальной работы. Это доступно на большинстве, если не на всех платформах Unix и некоторых не-Unix платформах и только в том случае, если исполняемый файл указывает на интерпретатор Python.
Примечание.
В Mac OS X (и, возможно, на других платформах) исполняемые файлы могут быть универсальными файлами с несколькими архитектурами. Чтобы получить 64-разрядность текущего интерпретатора, более надежно запросить атрибут sys.maxsize :
platform.machine() :
Функция platform.machine() возвращает тип машины, например 'I386'. Если значение не может быть определено, то возвращается пустая строка.
platform.node() :
Функция platform.node() возвращает сетевое имя компьютера, может быть не полностью! Если значение не может быть определено, то возвращается пустая строка..
platform.platform(aliased=0, terse=0) :
Функция platform.platform() возвращает одну строку, идентифицирующую базовую платформу, с максимально возможным количеством полезной информации.
Вывод предназначен для чтения человеком, а не для машинного анализа. Это может выглядеть по-разному на разных платформах, и это предназначено.
Если aliased имеет значение True , функция будет использовать псевдонимы для различных платформ, которые сообщают имена систем, которые отличаются от их общих имен, например SunOS будет сообщаться как Solaris.
При установке значения terse в значение True функция возвращает только абсолютный минимум информации, необходимой для идентификации платформы.
platform.processor() :
Функция platform.processor() возвращает реальное имя процессора, например 'Amdk6'.
Возвращается пустая строка, если значение не может быть определено. Обратите внимание, что многие платформы не предоставляют эту информацию или просто возвращают то же значение, что и для platform.machine() .
platform.python_build() :
Функция platform.python_build() возвращает кортеж (buildno, builddate) с указанием номера и даты сборки Python в виде строк.
platform.python_compiler() :
Функция platform.python_compiler() возвращает строку, идентифицирующую компилятор, используемый для компиляции Python.
platform.python_branch() :
Функция platform.python_branch() возвращает строку, идентифицирующую ветвь SCM реализации Python.
platform.python_implementation() :
Функция platform.python_implementation() возвращает строку, идентифицирующую реализацию Python. Возможные возвращаемые значения: ‘CPython’ , ‘IronPython’ , ‘Jython’ , ‘PyPy’ .
platform.python_revision() :
Функция platform.python_revision() возвращает строку, идентифицирующую ревизию SCM реализации Python.
platform.python_version() :
Функция platform.python_version() возвращает версию Python в виде строки 'major.minor.patchlevel' .
Обратите внимание, что в отличие от Python sys.version() , возвращаемое значение всегда будет включать уровень исправления (по умолчанию 0).
platform.python_version_tuple() :
Функция platform.python_version_tuple() возвращает версию Python как кортеж (major, minor, patchlevel) строк.
Обратите внимание, что в отличие от Python sys.version, возвращаемое значение всегда будет включать уровень исправления (по умолчанию он равен 0).
platform.release() :
Функция platform.release() возвращает выпуск системы, например, '2.2.0' или 'NT'. Если значение не может быть определено, то возвращается пустая строка.
platform.system() :
Функция platform.system() возвращает имя операционной системы такое как 'Linux' , 'Darwin' , 'Java' , 'Windows' . Если значение не может быть определено, то возвращается пустая строка.
platform.system_alias(system, release, version) :
Функция platform.system_alias() возвращает (system, release, version) , связанные с общими маркетинговыми именами, используемыми в некоторых системах.
platform.version() :
platform.uname() :
Функция platform.uname() представляет портативный интерфейс команды uname. Возвращает именованный кортеж, содержащий шесть атрибутов: system , node , release , version , machine и processor .
Обратите внимание, что функция platform.uname() добавляет шестой атрибут ( processor ), отсутствующий в результате os.uname(). Кроме того, имена атрибутов отличаются для первых двух атрибутов. Функция оs.uname() называет их sysname и nodename .
Записи, которые не могут быть определены, выводятся как '' .
Функции платформы Java
platform.java_ver(release='', vendor='', vminfo=('', '', ''), osinfo=('', '', '')) :
Функция platform.java_ver() возвращает версию интерфейса для Jython.
Возвращает кортеж (release, vendor, vminfo, osinfo) , где vminfo является кортежем (vm_name, vm_release, vm_vendor) , а osinfo - кортежем (os_name, os_version, os_arch) . Значения, которые не могут быть определены, устанавливаются на значения по умолчанию - пустая строка '' .
15 Answers 15
If you have python with a version >= 2.6 you can simply use
Also, as noted below, this count can include "virtual" hyperthreaded cpus, which may not be what you want if you are scheduling cpu-intensive tasks.
If you're interested into the number of processors available to your current process, you have to check cpuset first. Otherwise (or if cpuset is not in use), multiprocessing.cpu_count() is the way to go in Python 2.6 and newer. The following method falls back to a couple of alternative methods in older versions of Python:
On a MacPro 1,0 running the latest Ubuntu, on an HP Laptop running a recent Debian, and on an old eMachine running an old Ubuntu, the cpus_allowed results of /proc/self/status are respectively ff, f and f--- corresponding to 8, 4 and 4 by your (correct) math. However the actual numbers of CPUs are respectively 4, 2 and 1. I find that counting the number of occurrences of the word "processor" in /proc/cpuinfo may be the better way to go. (Or do I have the question wrong?)
With some further research--- if that can be said of "Googling"--- I find from the use of /proc/cpuinfo that if for any one of the listings for each "processor" you multiply the "siblings" by the "cpu cores" you get your "Cpus_allowed" number. And I gather that the siblings refer to hyper-threading, hence your reference to "virtual". But the fact remains that your "Cpus_allowed" number is 8 on my MacPro whereas your multiprocessing.cpu_count() answer is 4. My own open('/proc/cpuinfo').read().count('processor') also produces 4, the number of physical cores (two dual-core processors).
open('/proc/self/status').read() forgets to close the file. Use with open('/proc/self/status') as f: f.read() instead
@amcgregor In this case it's acceptable, agreed, just file handles being left open which I guess is ok if you're not writing a long running daemon/process; which I fear might end up hitting a max open file handles of the OS. It's worse when writing to a file that needs to get read again before the process ends, but that's not the case here so that's a moot point. Still a good idea to have a habit of using with for when you do encounter a case where you need it.
Another option is to use the psutil library, which always turn out useful in these situations:
This should work on any platform supported by psutil (Unix and Windows).
Note that in some occasions multiprocessing.cpu_count may raise a NotImplementedError while psutil will be able to obtain the number of CPUs. This is simply because psutil first tries to use the same techniques used by multiprocessing and, if those fail, it also uses other techniques.
This one is really good, considering that used method allows to find out is the CPU cores are logical ore physical ones. psutil.cpu_count(logical = True)
Hi @Bakuriu, Is there any way to get the number of cpu cores being used by a specific process using psutil?
@Devilhunter On Windows on my Intel i7-8700 psutil.cpu_count() gives 12 (it's a 6-core CPU with hyperthreading). This is because the default argument of logical is True, so you explicitly need to write psutil.cpu_count(logical = False) to get the number of physical Cores.
len(os.sched_getaffinity(0)) is what you usually want
os.sched_getaffinity(0) (added in Python 3) returns the set of CPUs available considering the sched_setaffinity Linux system call, which limits which CPUs a process and its children can run on.
0 means to get the value for the current process. The function returns a set() of allowed CPUs, thus the need for len() .
multiprocessing.cpu_count() and os.cpu_count() on the other hand just returns the total number of physical CPUs.
The difference is especially important because certain cluster management systems such as Platform LSF limit job CPU usage with sched_getaffinity .
Therefore, if you use multiprocessing.cpu_count() , your script might try to use way more cores than it has available, which may lead to overload and timeouts.
We can see the difference concretely by restricting the affinity with the taskset utility, which allows us to control the affinity of a process.
Minimal taskset example
For example, if I restrict Python to just 1 core (core 0) in my 16 core system:
with the test script:
then the output is:
Vs nproc
nproc does respect the affinity by default and:
and man nproc makes that quite explicit:
print the number of processing units available
Therefore, len(os.sched_getaffinity(0)) behaves like nproc by default.
nproc has the --all flag for the less common case that you want to get the physical CPU count without considering taskset:
os.cpu_count documentation
This number is not equivalent to the number of CPUs the current process can use. The number of usable CPUs can be obtained with len(os.sched_getaffinity(0))
From the 3.8 source under Lib/multiprocessing/context.py we also see that multiprocessing.cpu_count just forwards to os.cpu_count , except that the multiprocessing one throws an exception instead of returning None if os.cpu_count fails:
3.8 availability: systems with a native sched_getaffinity function
The only downside of this os.sched_getaffinity is that this appears to be UNIX only as of Python 3.8.
cpython 3.8 seems to just try to compile a small C hello world with a sched_setaffinity function call during configuration time, and if not present HAVE_SCHED_SETAFFINITY is not set and the function will likely be missing:
psutil.Process().cpu_affinity() : third-party version with a Windows port
This function does the same as the standard library os.sched_getaffinity on Linux, but they have also implemented it for Windows by making a call to the GetProcessAffinityMask Windows API function:
So in other words: those Windows users have to stop being lazy and send a patch to the upstream stdlib :-)
Задачи
Давай сначала обрисуем, что мы вообще планируем делать. Я планирую собирать следующую информацию:
- IP-адрес.
- MAC-адрес.
- Имя пользователя.
- Тип операционной системы.
- Скорость работы системы.
- Время.
- Скриншот.
- Скорость интернет‑соединения.
- Модель процессора.
И отправляться это все будет прямиком тебе в телегу через специальный бот.
Зачем?
Наверняка у тебя возник вопрос: зачем может понадобиться MAC-адрес или модель процессора? Эти параметры меняются очень и очень редко, так что прекрасно подходят для фингерпринтинга. Даже если пользователь купит более быстрый интернет‑канал или поменяет часовой пояс, ты без особого труда сможешь определить, что уже имел дело с этим компьютером. Стоит помнить, что ровно такие же методы используют хитрые рекламщики для идентификации пользователей, да и разработчики триальных версий программ тоже. Эта статья поможет чуть лучше понять, что можно узнать о твоем компьютере в полностью автоматическом режиме, а как применить эту информацию — решать только тебе.
В этой статье мы не будем показывать, как сформировать устойчивый к незначительным изменениям идентификатор, который поможет однозначно определить конкретный компьютер. Если тебе станет интересно — пиши в комментариях, и, возможно, мы сделаем большой гайд на эту тему!
Содержание:
-
Кроссплатформенные функции:
-
platform.architecture() , platform.machine() , platform.node() , platform.platform() , platform.processor() , platform.python_build() , platform.python_compiler() , platform.python_branch() , platform.python_implementation() , platform.python_revision() , platform.python_version() , platform.python_version_tuple() , platform.release() , platform.system() , , platform.version() , platform.uname() ,
-
platform.java_ver() ,
-
platform.win32_ver() , platform.win32_edition() , platform.win32_is_iot() ,
-
platform.mac_ver() ,
-
platform.libc_ver() ,
-
platform.freedesktop_os_release() (доступна в Python 3.10).
Функции платформы Windows
platform.win32_ver(release='', version='', csd='', ptype='') :
Функция platform.win32_ver() получает дополнительную информацию о версии из реестра Windows и возвращает кортеж (release, version, csd, ptype) , относящийся к выпуску ОС, номеру версии, уровню CSD (пакет обновления) и типу ОС (многопроцессорный/однопроцессорный).
Подсказка: ptype это 'Uniprocessor Free' на однопроцессорных машинах NT и 'Multiprocessor Free' на многопроцессорных машинах. 'Free' относится к версии ОС, свободной от кода отладки. Он также может указывать 'Checked' , что означает, что версия ОС использует код отладки, то есть код, который проверяет аргументы, диапазоны и т. д.
Примечание. Эта функция лучше всего работает с установленным пакетом win32all Марка Хаммонда. Очевидно, что функция platform.win32_ver() работает только на Win32-совместимых платформах.
platform.win32_edition() :
Функция platform.win32_edition() возвращает строку, представляющую текущую редакцию Windows. Возможные значения включают, но не ограничиваются: 'Enterprise' , 'IoTUAP' , 'ServerStandard' и 'nanoserver'.
platform.win32_is_iot() :
Функция platform.win32_is_iot() возвращает True , если версия Windows, возвращенная platform.win32_edition() , распознается как версия IoT .
Различная информацию об операционной системе и языке Python.
Python часто используется в качестве кроссплатформенного языка и иногда необходимо знать, на какой системе работает программа.
Например, инструмент для управления сетевой конфигурацией операционной системы может определять переносимое представление сетевых интерфейсов, псевдонимов, IP-адресов и т. д., но когда приходит время редактировать файлы конфигурации, то Python должен знать больше о хосте, чтобы использовать правильные команды и файлы конфигурации операционной системы.
Модуль platform включает в себя инструменты для получения сведений об аппаратной платформе, операционной системе и интерпретаторе на которой выполняется программа.
Инструменты
Сначала давай разберемся, где будем писать код. Можно кодить в обычном виндовом «Блокноте», но мы воспользуемся специальной IDE для Python — PyCharm. Установка и настройка просты как два рубля: скачал установщик, запустил — и кликай себе «Далее», пока есть такая кнопка.
Еще нам потребуется Python. Я буду использовать версию 3.9.0 — с ней точно все работает.
Функции платформы Unix.
platform.libc_ver(executable=sys.executable, lib='', version='', chunksize=16384) :
Функция platform.libc_ver() пытается определить версию libc , с которой связан исполняемый файл, по умолчанию интерпретатор Python.
Возвращает кортеж строк (lib, version) , которые по умолчанию соответствуют заданным параметрам в случае сбоя поиска.
Обратите внимание, что эта функция хорошо знает, как разные версии libc добавляют символы к исполняемому файлу. Можно использовать только для исполняемых файлов, скомпилированных с использованием gcc .
Файл читается и сканируется кусками байтов.
Функции платформы Unix.
platform.freedesktop_os_release() :
Вызывает ошибку OSError или подкласс OSError , если невозможно прочитать ни /etc/os-release , ни /usr/lib/os-release .
В случае успеха функция возвращает словарь, в котором ключи и значения являются строками. В значениях есть специальные символы, такие как " и $ без кавычек. Поля NAME , ID и PRETTY_NAME всегда определяются в соответствии со стандартом. Все остальные поля являются необязательными. Поставщики могут включать дополнительные поля.
Обратите внимание, что такие поля, как NAME , VERSION и VARIANT , представляют собой строки, подходящие для представления пользователям. Программы должны использовать такие поля, как ID , ID_LIKE , VERSION_ID или VARIANT_ID для идентификации дистрибутивов Linux.
Py-cpuinfo gets CPU info with pure Python. Py-cpuinfo should work without any extra programs or libraries, beyond what your OS provides. It does not require any compilation(C/C++, assembly, et cetera) to use. It works with Python 2 and 3.
key | Example value | Return Format |
---|---|---|
"python_version" | "2.7.12.final.0 (64 bit)" | string |
"cpuinfo_version" | (4, 0, 0) | (int, int, int) |
"cpuinfo_version_string" | "4.0.0" | string |
"hz_advertised_friendly" | "2.9300 GHz" | string |
"hz_actual_friendly" | "1.7330 GHz" | string |
"hz_advertised" | (2930000000, 0) | (int, int) |
"hz_actual" | (1733000000, 0) | (int, int) |
"arch" | "X86_64" | "X86_32", "X86_64", "ARM_8", "ARM_7", "PPC_32", "PPC_64", "SPARC_32", "SPARC_64", "S390X", "MIPS_32", "MIPS_64", "RISCV_32", "RISCV_64" |
"bits" | 64 | int |
"count" | 4 | int |
"l1_data_cache_size" | 32768 | int |
"l1_instruction_cache_size" | 32768 | int |
"l2_cache_size" | 262144 | int |
"l2_cache_line_size" | 256 | int |
"l2_cache_associativity" | 6 | int |
"l3_cache_size" | 3145728 | int |
"stepping" | 5 | int |
"model" | 30 | int |
"family" | 6 | int |
"processor_type" | 0 | int |
"flags" | ['acpi', 'aperfmperf', 'apic', 'arch_perfmon', 'bts', 'clflush', 'cmov', 'constant_tsc', 'cx16', 'cx8', 'de', 'ds_cpl', 'dtes64', 'dtherm', 'dts', 'ept', 'est', 'flexpriority', 'fpu', 'fxsr', 'ht', 'ida', 'lahf_lm', 'lm', 'mca', 'mce', 'mmx', 'monitor', 'msr', 'mtrr', 'nonstop_tsc', 'nopl', 'nx', 'pae', 'pat', 'pbe', 'pdcm', 'pebs', 'pge', 'pni', 'popcnt', 'pse', 'pse36', 'rdtscp', 'rep_good', 'sep', 'smx', 'ss', 'sse', 'sse2', 'sse4_1', 'sse4_2', 'ssse3', 'syscall', 'tm', 'tm2', 'tpr_shadow', 'tsc', 'vme', 'vmx', 'vnmi', 'vpid', 'xtopology', 'xtpr'] | [string] |
These fields are pulled directly from the CPU and are unverified. They may contain expected results. Other times they may contain wildly unexpected results or garbage. So it would be a bad idea to rely on them.
Если ты часто имеешь дело с разными компьютерами, тебе, конечно, нужен простой в использовании и быстрый инструмент для сбора информации о системе. Сегодня мы покажем, как сделать такую программу, отсылающую собранные данные в Telegram, а еще попрактикуемся в программировании на Python.
Чтобы просто посмотреть IP-адрес и другие настройки сети, тебе придется обратиться к командной строке и выполнить команду ipconfig / all . Ситуация одна из самых частых для эникейщиков и удаленных шаманов, но она хотя бы быстро решаема. Но если придется собирать более серьезный набор информации о машине, с которой сейчас будешь работать, — без автоматизации не обойтись. Этим мы сегодня и займемся.
Имей в виду, что эта программа может использоваться как для быстрого сбора информации о своей системе, так и для кражи идентифицирующей информации с компьютера жертвы. Мы граждане законопослушные, поэтому пусть это и не пароли, но, чтобы не раздражать правоохранителей, все тесты будут проводиться на изолированных виртуальных машинах.
warning
Несанкционированный доступ к компьютерной информации — преступление. Ни автор, ни редакция журнала не несут ответственности за твои действия.
Читайте также: