Skip to main content
 首页 » 编程设计

python之每次循环输出相同的时间戳

2025年05月04日15del

我有这段代码,我在其中读取其他脚本的输出,然后将其输入数据库。此外,还添加了时间戳。

    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()