Как я могу вернуть системную информацию в Python? - PullRequest
25 голосов
/ 21 января 2009

Используя Python, как можно получить общую информацию, такую ​​как использование ЦП, использование памяти (свободная, использованная и т. Д.), Количество процессов и т. Д., Чтобы один и тот же код мог выполняться в Linux, Windows, BSD и т. Д.

В качестве альтернативы, как эта информация может быть возвращена во всех вышеупомянутых системах с кодом, специфичным для этой ОС, только если эта ОС действительно является операционной средой?

Ответы [ 7 ]

17 голосов
/ 22 января 2009

Относительно кроссплатформенности: вам лучше всего написать код для конкретной платформы, а затем импортировать его условно. например,

import sys
if sys.platform == 'win32':
  import win32_sysinfo as sysinfo
elif sys.platform == 'darwin':
  import mac_sysinfo as sysinfo
elif 'linux' in sys.platform:
  import linux_sysinfo as sysinfo
#etc

print 'Memory available:', sysinfo.memory_available()

Для конкретных ресурсов, как указывает Энтони, вы можете получить доступ к /proc в Linux. Для Windows вы можете покопаться в Microsoft Script Repository . Я не уверен, где взять такую ​​информацию на Mac, но я могу придумать отличный сайт, где вы могли бы спросить: -)

5 голосов
/ 21 января 2009

В среде Linux вы можете читать из файловой системы / proc.

~$ cat /proc/meminfo
MemTotal:      2076816 kB
MemFree:        130284 kB
Buffers:        192664 kB
Cached:        1482760 kB
SwapCached:          0 kB
Active:         206584 kB
Inactive:      1528608 kB
HighTotal:     1179484 kB
HighFree:       120768 kB
LowTotal:       897332 kB
LowFree:          9516 kB
SwapTotal:     2650684 kB
SwapFree:      2650632 kB
Dirty:              64 kB
Writeback:          12 kB
AnonPages:       59668 kB
Mapped:          22008 kB
Slab:           200744 kB
PageTables:       1220 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   3689092 kB
Committed_AS:   263892 kB
VmallocTotal:   114680 kB
VmallocUsed:      3604 kB
VmallocChunk:   110752 kB
2 голосов
/ 12 марта 2015

psutil должен предоставить то, что вам нужно:

[...] кроссплатформенная библиотека для получения информации о запущенных процессах и использовании системы (ЦП, память, диски, сеть) [...]

[...] поддерживает Linux, Windows, OSX, FreeBSD и Sun Solaris, как 32-разрядные, так и 64-разрядные архитектуры [...]

2 голосов
/ 21 января 2009
1 голос
/ 21 января 2009

Похоже, вы хотите получить гораздо больше информации, чем стандартная библиотека Python. Если бы я был вами, я бы скачал исходный код для «ps» или «top», или его версию для Gnome / KDE, или любое количество программ для мониторинга / создания графиков системы, которые с большей вероятностью будут иметь все необходимые кроссы Unix биты платформы, посмотрите, что они делают, а затем сделайте необходимые нативные вызовы с помощью ctypes.

Обнаружить платформу тривиально. Например, с помощью ctypes вы можете попытаться загрузить libc.so, если это вызывает исключение, попробуйте загрузить «msvcrt.dll» и так далее. Не говоря уже о простой проверке имени операционной системы с помощью os.name. Затем просто делегируйте вызовы к вашему новому кроссплатформенному API-интерфейсу соответствующей (специфической для платформы) реализации (извините).

Когда вы закончите, не забудьте загрузить полученный пакет в pypi.

1 голос
/ 21 января 2009

взгляните на модуль os

0 голосов
/ 21 января 2009

С этой целью есть проект PSI (Информация о системе Python), но он пока не охватывает Windows.

Вероятно, вы можете использовать PSI и рецепты , как этот , и создать базовую библиотеку, соответствующую вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...