我为我的rpi项目编写了一些自动化python脚本...这里是脚本的一部分:
import socket
import sys
import platform
import uuid
import psutil
import subprocess
import os
import RPi.GPIO as GPIO
import time
from subprocess import call
def measure_temp():
temp = os.popen("vcgencmd measure_temp").readline()
return (temp.replace("temp=","").replace("'C\n",""))
while True:
print
print 'Hostname:' +socket.gethostname()
print 'Machine :' +platform.machine()
print
print 'CPU Usage:'
print(psutil.cpu_percent())
print
print 'MEM Usage:'
print(psutil.virtual_memory().percent)
print
print 'Disk Usage:'
print(psutil.disk_usage('/').percent)
print
print 'CPU Temp:'
if measure_temp() == "50.1":
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(22,GPIO.OUT)
print "Fan on"
GPIO.output(22,GPIO.HIGH)
time.sleep(50)
print "Fan off"
GPIO.output(22,GPIO.LOW)
time.sleep(10)
GPIO.cleanup()
print(measure_temp())
time.sleep(10)
os.system('clear')
print 'end'
我的问题在这一行:
if measure_temp() == "50.1":
我要像这样在第一个数字之后转义所有符号:
if measure_temp() == "5\":
但不起作用。我该如何解决这个问题?
答案 0 :(得分:0)
measure_temp()
似乎返回一个字符串。我先将其转换为float
类型,然后检查该值是否大于50。
if float(measure_temp()) >= 50:
# Your code
您需要确定measure_temp
始终返回可以转换为浮点数的字符串。
答案 1 :(得分:0)
您可以将measure_temp()
替换为以下内容,并返回float
,这样更易于处理:
def measure_temp():
temp = os.popen("vcgencmd measure_temp").readline()
try :
t = re.findall( r'temp=([\d\.]+)', temp )
t = float(t[0])
except : # something went wrong
print 'unable to convert the temperature:', temp
t = 20.0 # room temperature
pass
return t
和import re
在文件开头的某个位置。
完成后,您可以将温度值与数字进行比较,例如if temperature > 50
之类的东西。
以防万一,您最近的更改'if float(measure_temp())> = 50:'最终会在vcgencmd
停顿或返回空字符串或无法轻松转换的内容时中断到float
,您应该处理一些例外情况以使脚本平稳运行。