Python获取CPU、内存使用率以及网络使用状态代码
由于psutil已更新到3.0.1版本,最新的代码如下:
#!/usr/bin/envpython
importos
importtime
importsys
importatexit
importpsutil
#print"Welcome,currentsystemis",os.name,"3secondslatestarttogetdata"
time.sleep(3)
line_num=1
#functionofGetcpustate
defgetCPUstate(interval=1):
return("CPU:"+str(psutil.cpu_percent(interval))+"%")
defgetMemorystate():
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"
)
returnline
defbytes2human(n):
"""
>>>bytes2human(10000)
'9.8k'
>>>bytes2human(100001221)
'95.4M'
"""
symbols=('K','M','G','T','P','E','Z','Y')
prefix={}
fori,sinenumerate(symbols):
prefix[s]=1<<(i+1)*10
forsinreversed(symbols):
ifn>=prefix[s]:
value=float(n)/prefix[s]
return'%.2f%s'%(value,s)
return'%.2fB'%(n)
defpoll(interval):
"""Retrieverawstatswithinanintervalwindow."""
tot_before=psutil.net_io_counters()
pnic_before=psutil.net_io_counters(pernic=True)
#sleepsometime
time.sleep(interval)
tot_after=psutil.net_io_counters()
pnic_after=psutil.net_io_counters(pernic=True)
#getcpustats
cpu_state=getCPUstate(interval)
#getmemory
memory_state=getMemorystate()
return(tot_before,tot_after,pnic_before,pnic_after,cpu_state,memory_state)
defrefresh_window(tot_before,tot_after,pnic_before,pnic_after,cpu_state,memory_state):
"""printstatsonscreen"""
#printcurrenttime,cpustate,memory
print(time.asctime()+"|"+cpu_state+"|"+
memory_state)
#total
print("NetStates:")
print("totalbytes:sent:%-10sreceived:%s"%(\
bytes2human(tot_after.bytes_sent),\
bytes2human(tot_after.bytes_recv)))
print("totalpackets:sent:%-10sreceived:%s"%(\
tot_after.packets_sent,\
tot_after.packets_recv))
#per-networkinterfacedetails:let'ssortnetworkinterfacesso
#thattheoneswhichgeneratedmoretrafficareshownfirst
print("")
nic_names=pnic_after.keys()
#nic_names.sort(key=lambdax:sum(pnic_after[x]),reverse=True)
fornameinnic_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
while1:
args=poll(interval)
refresh_window(*args)
interval=1
except(KeyboardInterrupt,SystemExit):
pass
以上就是本次更新后的实例代码,大家可以一起测试下,如果有其他问题可以在下方的留言区讨论,感谢你对毛票票的支持。