使用Python,如何以通用的方式返回諸如CPU使用率,內存使用率(free,used等),進程數量等信息,以便相同的代碼可以在Linux,Windows,BSD等上運行?如何在Python中返回系統信息?
或者,只有當該操作系統確實是操作環境時,該操作系統的特定代碼才能運行,這些信息如何在上述所有系統上返回?
使用Python,如何以通用的方式返回諸如CPU使用率,內存使用率(free,used等),進程數量等信息,以便相同的代碼可以在Linux,Windows,BSD等上運行?如何在Python中返回系統信息?
或者,只有當該操作系統確實是操作環境時,該操作系統的特定代碼才能運行,這些信息如何在上述所有系統上返回?
關於跨平臺:最好的辦法是編寫特定於平臺的代碼,然後有條件地導入它。例如
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()
對於具體的資源,安東尼指出,你可以訪問linux下的/proc
。對於Windows,您可以在Microsoft Script Repository處捅一捅。我不知道從哪裏得到這樣的在Mac上的信息,但我能想到的一個偉大的網站,在那裏你可以問:-)
+1:每個OS *都*不同。一些概念不映射。它不能使操作系統不可知。它必須是多態的,每個操作系統都有獨特的實現。 – 2009-01-21 22:44:43
看一看的os module
它看起來像你想獲得比標準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
該平臺模塊不會返回任何他正在尋找的東西。 – DNS 2009-04-11 15:49:14
有與目的的PSI(Python的系統信息)項目,但他們沒有涵蓋Windows尚未。
您可能可以使用PSI並回收like this one並創建一個滿足您需求的基本庫。
psutil應提供你需要什麼的:
[.. ...]支持Linux,Windows,OSX,FreeBSD和Sun Solaris的跨平臺庫, 32位和64位體系結構[...]
pip install psutil – meawoppl 2013-07-18 21:32:56