由于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
|
以上就是本次更新后的实例代码,大家可以一起测试下,如果有其他问题可以在下方的留言区讨论,感谢你对服务器之家的支持。