由于psutil已更新到3.0.1版本,最新的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#!/usr/bin/env python import os import time import sys import atexit import psutil #print "Welcome,current system is",os.name," 3 seconds late start to get data" time.sleep( 3 ) line_num = 1 #function of Get cpu state def getCPUstate(interval = 1 ): return ( " CPU:" + str (psutil.cpu_percent(interval)) + "%" ) def getMemorystate(): phymem = psutil.virtual_memory() line = "Memory: %5s%% %6s/%s" % ( phymem.percent, str ( int (phymem.used / 1024 / 1024 )) + "M" , str ( int (phymem.total / 1024 / 1024 )) + "M" ) return line def bytes2human(n): """ >>>bytes2human(10000) '9.8k' >>>bytes2human(100001221) '95.4M' """ symbols = ( 'K' , 'M' , 'G' , 'T' , 'P' , 'E' , 'Z' , 'Y' ) prefix = {} for i ,s in enumerate (symbols): prefix[s] = 1 << (i + 1 ) * 10 for s in reversed (symbols): if n > = prefix[s]: value = float (n) / prefix[s] return '%.2f %s' % (value,s) return '%.2fB' % (n) def poll(interval): """Retrieve raw stats within an interval window.""" tot_before = psutil.net_io_counters() pnic_before = psutil.net_io_counters(pernic = True ) #sleep some time time.sleep(interval) tot_after = psutil.net_io_counters() pnic_after = psutil.net_io_counters(pernic = True ) #get cpu stats cpu_state = getCPUstate(interval) #get memory memory_state = getMemorystate() return (tot_before,tot_after,pnic_before,pnic_after,cpu_state,memory_state) def refresh_window(tot_before,tot_after,pnic_before,pnic_after,cpu_state,memory_state): """print stats on screen""" #print current time,cpu state,memory print (time.asctime() + " | " + cpu_state + " | " + memory_state) #total print ( " NetStates:" ) print ( " total bytes: sent: %-10s received: %s" % (\ bytes2human(tot_after.bytes_sent), \ bytes2human(tot_after.bytes_recv))) print ( " total packets: sent: %-10s received: %s" % (\ tot_after.packets_sent,\ tot_after.packets_recv)) # per-network interface details: let's sort network interfaces so # that the ones which generated more traffic are shown first print ( " " ) nic_names = pnic_after.keys() #nic_names.sort(key=lambda x: sum(pnic_after[x]), reverse=True) for name in nic_names: stats_before = pnic_before[name] stats_after = pnic_after[name] templ = "%-15s %15s %15s" print (templ % (name, "TOTAL" , "PER-SEC" )) print (templ % ( "bytes-sent" , bytes2human(stats_after.bytes_sent), bytes2human(stats_after.bytes_sent - stats_before.bytes_sent) + '/s' , )) print (templ % ( "bytes-recv" , bytes2human(stats_after.bytes_recv), bytes2human(stats_after.bytes_recv - stats_before.bytes_recv) + '/s' , )) print (templ % ( "pkts-sent" , stats_after.packets_sent, stats_after.packets_sent - stats_before.packets_sent, )) print ((templ % ( "pkts-recv" , stats_after.packets_recv, stats_after.packets_recv - stats_before.packets_recv, ))) print ( " " ) try : interval = 0 while 1 : args = poll(interval) refresh_window( * args) interval = 1 except (KeyboardInterrupt,SystemExit): pass |
以上就是本次更新后的实例代码,大家可以一起测试下,如果有其他问题可以在下方的留言区讨论,感谢你对服务器之家的支持。