本篇介绍如何使用Python编写一个能输出树莓派各种状态和数据的脚本,包括CPU温度、CPU占用情况、内存占用情况和硬盘占用。
建立脚本:
1 | sudo nano get.py |
贴入如下代码:
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 | import os # Return CPU temperature as a character string def getCPUtemperature(): res = os.popen( 'vcgencmd measure_temp' ).readline() return (res.replace( "temp=" ," ").replace(" 'C\n "," ")) # Return RAM information (unit=kb) in a list # Index 0: total RAM # Index 1: used RAM # Index 2: free RAM def getRAMinfo(): p = os.popen( 'free' ) i = 0 while 1 : i = i + 1 line = p.readline() if i = = 2 : return (line.split()[ 1 : 4 ]) # Return % of CPU used by user as a character string def getCPUuse(): return ( str (os.popen( "top -n1 | awk '/Cpu\(s\):/ {print $2}'" ).readline().strip())) # Return information about disk space as a list (unit included) # Index 0: total disk space # Index 1: used disk space # Index 2: remaining disk space # Index 3: percentage of disk used def getDiskSpace(): p = os.popen( "df -h /" ) i = 0 while 1 : i = i + 1 line = p.readline() if i = = 2 : return (line.split()[ 1 : 5 ]) # CPU informatiom CPU_temp = getCPUtemperature() CPU_usage = getCPUuse() # RAM information # Output is in kb, here I convert it in Mb for readability RAM_stats = getRAMinfo() RAM_total = round ( int (RAM_stats[ 0 ]) / 1000 , 1 ) RAM_used = round ( int (RAM_stats[ 1 ]) / 1000 , 1 ) RAM_free = round ( int (RAM_stats[ 2 ]) / 1000 , 1 ) # Disk information DISK_stats = getDiskSpace() DISK_total = DISK_stats[ 0 ] DISK_used = DISK_stats[ 1 ] DISK_perc = DISK_stats[ 3 ] if __name__ = = '__main__' : print ('') print ( 'CPU Temperature = ' + CPU_temp) print ( 'CPU Use = ' + CPU_usage) print ('') print ( 'RAM Total = ' + str (RAM_total) + ' MB' ) print ( 'RAM Used = ' + str (RAM_used) + ' MB' ) print ( 'RAM Free = ' + str (RAM_free) + ' MB' ) print ('') print ( 'DISK Total Space = ' + str (DISK_total) + 'B' ) print ( 'DISK Used Space = ' + str (DISK_used) + 'B' ) print ( 'DISK Used Percentage = ' + str (DISK_perc)) |
然后执行:
1 2 | chmod +x get.py python get.py |
预期输出结果如下:
1 2 3 4 5 6 7 8 9 10 | CPU Temperature = 53.0 CPU Use = 13.5 RAM Total = 497.0 MB RAM Used = 116.0 MB RAM Free = 381.0 MB DISK Total Space = 3.6GB DISK Used Space = 1.8GB DISK Used Percentage = 53% |
cpu温度获取这样写会不会更轻巧些
def getCPUtemperature():
return os.popen( ‘/opt/vc/bin/vcgencmd measure_temp’ ).read()[5:9]
或者直接读取系统自己的状态更新,省去模拟shell
def getCPUtemperature():
with open( “/sys/class/thermal/thermal_zone0/temp” ) as tempFile:
res = tempFile.read()
res=str(float(res)/1000)
return res
赞一下楼上的写法
同理,getRaminfo()可以写成: return os.popen(‘free|tail -n +2’).readline().split()[1:4]
getDiskSpace()可以写成:return os.popen(‘df -h /|tail -n +2’).readline().split()[1:5]
popen的效率不高,但是配合shell相当灵活~~
cpu占用率那个几点几是百分百么?为什么我图形界面显示100%了py还是几点几