2009-01-21 49 views
24

使用Python,如何以通用的方式返回諸如CPU使用率,內存使用率(free,used等),進程數量等信息,以便相同的代碼可以在Linux,Windows,BSD等上運行?如何在Python中返回系統信息?

或者,只有當該操作系統確實是操作環境時,該操作系統的特定代碼才能運行,這些信息如何在上述所有系統上返回?

+2

pip install psutil – meawoppl 2013-07-18 21:32:56

回答

17

關於跨平臺:最好的辦法是編寫特定於平臺的代碼,然後有條件地導入它。例如

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上的信息,但我能想到的一個偉大的網站,在那裏你可以問:-)

+5

+1:每個OS *都*不同。一些概念不映射。它不能使操作系統不可知。它必須是多態的,每個操作系統都有獨特的實現。 – 2009-01-21 22:44:43

1

它看起來像你想獲得比標準Python庫提供了更多的信息。如果我是你的話,我會下載'ps'或'top'的源代碼,或者相同的Gnome/KDE版本,或者任何數量的更可能具有所有必要的Unix跨系統監控/繪圖程序的源代碼平臺位,看看他們做了什麼,然後用ctypes進行必要的本地調用。

檢測平臺是微不足道的。例如,對於ctypes,你可能會嘗試加載libc.so,如果拋出異常,請嘗試加載'msvcrt.dll'等。更不用說簡單地用os.name檢查操作系統的名稱。然後,將呼叫委託給新的跨平臺API,以適應特定平臺(對不起)的實施。

完成後,不要忘記將結果包上傳到pypi。

5

在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 
0

有與目的的PSI(Python的系統信息)項目,但他們沒有涵蓋Windows尚未。

您可能可以使用PSI並回收like this one並創建一個滿足您需求的基本庫。

2

psutil應提供你需要什麼的:

[.. ...]支持Linux,Windows,OSX,FreeBSD和Sun Solaris的跨平臺庫, 32位和64位體系結構[...]