我这两天在学习树莓派,现在在尝试让pi开机就在后台启动一个程序,获取pi的CPU、GPU、内存占用率、CPU使用率,并将数据上传到yeelink上。但是问题来了:
1、每次开机的确都是能够自启动,但是程序只能前半部分,获取CPU、GPU温度,并且将后半截程序跳过,再回去循环执行前半截;
2、如果我在terminal里面python程序在后台运行,他只能执行前半部分到获取GPU温度,之后就死了;
3、这个程序如果我不让他在后台执行,直接在terminal里面执行的话,他有时能够完全执行的,
所以我想请问,有没有知道这具体是什么原因造成的?或者说我的程序里面哪些句子是不能在后台运行的?下面的是我的程序代码
#!/usr/bin python # -*- coding: utf-8 -*- import os import requests import json import time import string import commands def getcpu(): return(os.popen("top -n1"))#获取CPU的情况的函数 while True:
#获取CPU温度 file = open("/sys/class/thermal/thermal_zone0/temp") temp=float(file.read())/1000 file.close() apiurl_cpu='http://api.yeelink.net/v1.0/device/17020/sensor/29454/datapoints' apiheaders={'U-Apikey':'08fc4e36ad2d49c3eb830de6bd6bad2d','content-type':'application/json'} payload_cpu={'value':temp} print temp r=requests.post(apiurl_cpu,headers=apiheaders,data=json.dumps(payload_cpu))
#获取GPU的温度 gpu_temp=commands.getoutput('/opt/vc/bin/vcgencmd measure_temp').replace('temp=','').replace('\'C','') apiurl_gpu='http://api.yeelink.net/v1.0/device/17020/sensor/29599/datapoints' payload_gpu={'value':gpu_temp} print gpu_temp r=requests.post(apiurl_gpu,headers=apiheaders,data=json.dumps(payload_gpu)) #以下是调用函数获取CPU使用率以及内存的使用情况 cpuused=getcpu() for cpuline in cpuused: if cpuline[:3]=="%Cp": CPU_Used=cpuline.split(":")[1].split(",")[0].split(" ")[-2] payload_CPU_Usage={'value':CPU_Used} apiurl_CPU_Usage='http://api.yeelink.net/v1.0/device/17020/sensor/29648/datapoints' print CPU_Used if "Mem:" in cpuline: MemTotal=cpuline.split(":")[1].split(",")[0].strip("total").split(" ")[-2] MemUsed=cpuline.split(":")[1].split(",")[1].strip("used").split(" ")[-2] MemUsedRate=float(str(MemUsed))/float(str(MemTotal)) MemUsedRatio="%.2f"%(MemUsedRate*100) apiurl_mem='http://api.yeelink.net/v1.0/device/17020/sensor/29600/datapoints' payload_mem={'value':MemUsedRatio} print MemUsedRatio r=requests.post(apiurl_mem,headers=apiheaders,data=json.dumps(payload_mem)) print "====================" time.sleep(30)