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

标签 python timestamp

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

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

但是,在每个循环中,都会输出与第一次运行相同的时间戳:

terminal outputs showing same timestamp after 3 loops

这怎么可能? 提前致谢!

最佳答案

您在代码的开头运行这些行:

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/

相关文章:

postgresql - 使用 to_timestamp 函数解析 Twitter 时间戳时出现问题

python - 为什么 get_default_prefix @classmethod 而不仅仅是常规方法

python - wxPython ListCtrl 复制到剪贴板

javascript - 如何使用 BeautifulSoup 抓取由 javascript 生成的数据?

linux - 如何使用 bash 在连续运行时创建具有相同元数据/时间戳的目录结构?

ios - Instagram MIN_TIMESTAMP 没有返回它应该返回的所有图像

Python:在没有循环的情况下从另一个数据框中选择一个数据框中的多个列

python - 使用 scapy 嗅探特定端口上的流量

java - 比较java中的两个时间戳

python - 将 48 位(6 个八位字节)从 DNP3 时间转换为 python 中的时间戳