我有这段代码,我在其中读取其他脚本的输出,然后将其输入数据库。此外,还添加了时间戳。
import time
import os
import subprocess
import sys
from time import sleep
import datetime
import sqlite3
import fnmatch, shutil
sensorID = "1"
dbname = 'sensorsData.db'
t = time.localtime()
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', t)
refresh = 300 #time in seconds , getting new data from sensors
#get data from sensor
def gettemp():
temp = subprocess.check_output("sudo python /home/pi/AIRQMONITOR/temp.py", shell=True)
print(timestamp)
return(temp)
def getpm25():
pm25 = subprocess.check_output("sudo python /home/pi/AIRQMONITOR/pm2.py", shell=True)
return (pm25)
def getpm10():
pm10 = subprocess.check_output("sudo python /home/pi/AIRQMONITOR/pm10.py", shell=True)
return (pm10)
def getco():
co = subprocess.check_output("sudo python /home/pi/AIRQMONITOR/co.py", shell=True)
return(co)
#log data
def logdata(temp,co,pm25,pm10):
conn = sqlite3.connect(dbname)
curs=conn.cursor()
curs.execute("INSERT INTO sensors values(?,?,?,?,?)", (timestamp, temp, co, pm25, pm10))
curs.execute("INSERT INTO temperatures values(?,?,?)", (timestamp, sensorID, temp ))
curs.execute("INSERT INTO co values(?,?,?)", (timestamp, sensorID, co ))
curs.execute("INSERT INTO pm25 values(?,?,?)", (timestamp, sensorID, pm25 ))
curs.execute("INSERT INTO pm10 values(?,?,?)", (timestamp, sensorID, pm10 ))
conn.commit()
conn.close()
#main
def main():
while True:
temp = gettemp()
pm25 = getpm25()
pm10 = getpm10()
co = getco()
logdata(temp, co, pm25, pm10)
time.sleep(refresh)
#-----execute program... gooo!
main()
但是,在每个循环中,都会输出与第一次运行相同的时间戳:
这怎么可能? 提前致谢!
最佳答案
您在代码的开头运行这些行:
t = time.localtime()
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', t)
这些只运行一次(不是在循环中)并且其中的时间戳永远不会改变。如果你想更新时间戳,你应该让这些行成为你循环的一部分,或者更好的是,使用一个函数:
def get_timestamp():
t = time.localtime()
return time.strftime('%Y-%m-%d %H:%M:%S', t)
并在每次尝试使用 timestamp
时将其替换为 get_timestamp()
关于python - 每次循环输出相同的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268688/