linux-raspbian系统下编写python脚本显示树莓派的当前cpu温度、使用率、内存和硬盘信息

描述:之前查看树莓派的温度一直都需要输命令: cd /sys/class/thermal/thermal_zone0 然后cat temp 才能给出数据比如45084,给出的数据需要除以1000才是实际温度值,路径太长很不方便,因此想写个脚本运行后自动给出结果。

网上已经有相关的帖子,作为小白自然是拿来先跑一跑试试

  参考文章   http://shumeipai.nxez.com/2014/10/04/get-raspberry-the-current-status-and-data.html

                     http://blog.csdn.net/xukai871105/article/details/38349209

网络源码如下:

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():
    = os.popen('free')
    = 0
    while 1:
        = + 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():
    = os.popen("df -h /")
    = 0
    while 1:
        = +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))

运行结果:提示:CPU Temperature = VCHI initialization failed初始化失败 ,至于为什么失败,

我猜测是该作者的树莓派和我的派在配置上有些不同

,我的解决思路是:既然不能自动调出温度,不如把temp文件的绝对路径写上,读取temp文件里的数据即可。

以下是几次错误尝试:
1
def getCPUtemperature():
    res = os.popen('/sys/class/thermal/thermal_zone0').readline()
    return(res.replace("temp=","").replace("'C\n",""))
 2
def getCPUtemperature():
    res = os.popen(' cd sys/class/thermal/thermal_zone0/temp').readline()
    return(res.replace("temp=","").replace("'C\n",""))
提示没有权限
3
def getCPUtemperature():
    res = os.popen(' sudo cd sys/class/thermal/thermal_zone0/temp').readline()
    return(res.replace("temp=","").replace("'C\n",""))
执行结果显示的温度是五位整数,显然除以1000才合适
刚开始试图直接用res除以1000,若干次失败尝试之后发现:提示真的是个好东西
系统早就提示了,字符串不能进行算术运算.....
接着:我详细了解了
def函数 (自定义函数)
return()(每个函数都必须有的返回值)
res (列表)
os.popen  格式: os.popen(command[, mode[, bufsize]])括号内是执行的一段程序,程序的值返回给变量 
详情链接 http://www.runoob.com/python/os-popen.html
readline() read() readlines() 的区别 ,在这里os.popen()括号内的程序实现的功能是读取temp文件的内容并转换成
string格式(字符串格式),replace()在这里的功能是将所读取内容中的逗号和空格删除(thermal_zone0路径下的temp
中只有一个五位数,用不着去空格)
另外,read()readline()readlines()是文件的属性,是用来读写文件内容的

linux-raspbian系统下编写python脚本显示树莓派的当前cpu温度、使用率、内存和硬盘信息_第1张图片
print('CPU Temperature = '+CPU_temp)  在打印结束阶段,print()中的+号起到了字符串连接的功能,


因为temp中的数字是以字符串的形式保存的,不能直接进行除以1000这样的运算,必须将字符串转换成浮点型再做运算

linux-raspbian系统下编写python脚本显示树莓派的当前cpu温度、使用率、内存和硬盘信息_第2张图片
运算完成后还需要将浮点型的结果再转换成字符串,配合打印阶段的字符串连接。也就形成了下面的这段程序:
def getCPUtemperature():
    res = os.popen('sudo cat /sys/class/thermal/thermal_zone0/temp').readline()
    tempfloat=float(res) / 1000
    temp=str(tempfloat)
    return(temp)
修改完后运行成功。

linux-raspbian系统下编写python脚本显示树莓派的当前cpu温度、使用率、内存和硬盘信息_第3张图片


附:

python中的字符数字之间的转换函数


http://www.cnblogs.com/wuxiangli/p/6046800.html

你可能感兴趣的:(linux-raspbian)