【发布时间】:2010-10-02 18:34:56
【问题描述】:
使用 Python,如何以通用方式返回 CPU 使用率、内存使用率(空闲、已使用等)、进程计数等信息,以便在 Linux、Windows、BSD 等上运行相同的代码?
或者,只有当操作系统确实是操作环境时,如何才能在所有上述系统上返回此信息,并且该操作系统特定于该操作系统的代码正在运行?
【问题讨论】:
使用 Python,如何以通用方式返回 CPU 使用率、内存使用率(空闲、已使用等)、进程计数等信息,以便在 Linux、Windows、BSD 等上运行相同的代码?
或者,只有当操作系统确实是操作环境时,如何才能在所有上述系统上返回此信息,并且该操作系统特定于该操作系统的代码正在运行?
【问题讨论】:
【讨论】:
看起来您想要获得比标准 Python 库提供的更多信息。如果我是你,我会下载 'ps' 或 'top' 的源代码,或者相同的 Gnome/KDE 版本,或者任何数量的系统监控/绘图程序,它们更有可能拥有所有必要的 Unix 交叉平台位,看看他们做了什么,然后使用 ctypes 进行必要的本机调用。
检测平台很简单。例如,对于 ctypes,您可能会尝试加载 libc.so,如果引发异常,请尝试加载“msvcrt.dll”等等。更不用说简单地使用 os.name 检查操作系统的名称。然后只需将对新的跨平台 API 的调用委托给适当的平台特定(抱歉)实现。
完成后,不要忘记将生成的包上传到 pypi。
【讨论】:
在 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
【讨论】:
【讨论】:
PSI(Python 系统信息)项目就是以此为目标的,但它们还没有涵盖 Windows。
您可能可以使用 PSI 和 recpies like this one 并创建一个满足您需求的基本库。
【讨论】:
关于跨平台:您最好的选择可能是编写特定于平台的代码,然后有条件地导入它。例如
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()
对于具体的资源,Anthony 指出你可以在 linux 下访问/proc。对于 Windows,您可以在 Microsoft Script Repository 处查看。我不知道在哪里可以获得有关 Mac 的此类信息,但我可以想到一个很棒的网站,您可以在其中询问:-)
【讨论】:
psutil 应该提供您所需要的:
[...] 跨平台库,用于检索有关正在运行的进程和系统利用率(CPU、内存、磁盘、网络)的信息[...]
[...] 支持 32 位和 64 位架构的 Linux、Windows、OSX、FreeBSD 和 Sun Solaris [...]
【讨论】: