这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 关于后台运行py小程序的问题,请大家指教

共6条 1/1 1 跳转至

关于后台运行py小程序的问题,请大家指教

菜鸟
2015-01-05 21:58:55     打赏

我这两天在学习树莓派,现在在尝试让pi开机就在后台启动一个程序,获取pi的CPU、GPU、内存占用率、CPU使用率,并将数据上传到yeelink上。但是问题来了:

1、每次开机的确都是能够自启动,但是程序只能前半部分,获取CPU、GPU温度,并且将后半截程序跳过,再回去循环执行前半截;

2、如果我在terminal里面python程序在后台运行,他只能执行前半部分到获取GPU温度,之后就死了;


3、这个程序如果我不让他在后台执行,直接在terminal里面执行的话,他有时能够完全执行的,

第3种情情况

所以我想请问,有没有知道这具体是什么原因造成的?或者说我的程序里面哪些句子是不能在后台运行的?下面的是我的程序代码

#!/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)

 





关键词: 后台运行     自启动    

院士
2015-01-06 10:46:59     打赏
2楼
这个不懂,给你在群里问问

高工
2015-01-06 11:50:28     打赏
3楼

建议楼主关注一下数据变量的格式

以前遇到过这种问题,只是记得是由于这种变量格式和linux存储格式之间有不配合的情况造成的


院士
2015-01-06 23:15:34     打赏
4楼
不会是传说中的字节对齐问题吧~~

菜鸟
2015-02-02 23:17:26     打赏
5楼
我这没有验证环境,你的程序里有http协议的内容,如果异常,也可能是网络原因造成的

专家
2015-03-30 10:03:05     打赏
6楼
这个实验不错,有机会也尝试一下,一起找问题

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]