读取在python中不断更新的文件

2024-04-18 13:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读取python中每20秒更新一次的日志文件。到目前为止,我只能读取一个静态文件。我试着读入这些值,用高位图把它们绘制在一个图表上。我能够使用静态文件绘制值。不过,我想图表是实时的。有人能帮我吗

with open(self.filename) as f:
        cpu = []
        idle = []
        wait = []
        ld5 = []
        ld10 = []
        ld15 = []
        load = []
        swapu = []
        swapf = []

        #need to remove all the white space in the file
        for line in f:
            if line is not None:
                    stripped = line.strip()
                    dstat_tokens = self.whitespace_re.split(stripped)           
            #dstat_tokens = self.whitespace_re.split(stripped)
                    dstat_tokens = line.split(',')
                    (timestamp) = dstat_tokens[0:1]
                    (system,user,idl, wt, hwi, sfi) = dstat_tokens[1:7];
                    (diskread,diskwrite) = dstat_tokens[7:9]
                    (pagein,pageout) = dstat_tokens[9:11]
                    (load5,load10,load15) = dstat_tokens[11:14]
                    (used,buffers,cache,free) = dstat_tokens[14:18]
                    (swapused,swapfree) = dstat_tokens[18:20]
                    (interrupts,contextswitches) = dstat_tokens[20:22]
                    (receive,send) = dstat_tokens[22:24]
                    (runnable,uninterruptable,new) = dstat_tokens[24:27]

                #print "Stripping %s" % timestamp[0]
                    ts = time.strptime(timestamp[0], "%d %b %Y %H:%M:%S CET")
                    dt = datetime.fromtimestamp(time.mktime(ts))
                    returned_time = dt.strftime("%d/%m/%Y %H:%M:%S")
                #print returned_time

                    cpu.append({"ts": returned_time, "value": float(system)})
                    idle.append({"ts": returned_time, "value": float(idl)})
                    wait.append({"ts": returned_time, "value": float(wt)})
                    ld5.append({"ts": returned_time, "value": float(load5)})
                    ld10.append({"ts": returned_time, "value": float(load10)})
                    ld15.append({"ts": returned_time, "value": float(load15)})
                    load.append({"ts": returned_time, "value": float(load5)})
                    swapu.append({"ts": returned_time, "value": float(swapused)})
                    swapf.append({"ts": returned_time, "value": float(swapfree)})

            self.data["cpu"] = cpu
            self.data["idle"] = idle
            self.data["load5"] = ld5
            self.data["load10"] = ld10
            self.data["load15"] = ld15
            self.data["swapused"] = swapu
            self.data["swapfree"] = swapf`

Tags: 文件selfdatatimevaluelinecpufloat
1条回答
网友
1楼 · 发布于 2024-04-18 13:23:54

我对您的问题的理解是,您希望在每次更新日志文件时更新图形。您可以这样做,每次读取时将文件的长度存储在一个txt文档中,然后每x秒更新一次图形,检查该txt文档并从中获取文件位置,然后seek()到该位置

f = open(log, 'r')
f2 = open(log_file_position,'r+')
last_position = f2.readline()
f.seek(last_position)
#do stuff to log file so you will have read to the end
f2.truncate(0)
f2.write(f.tell()) #f.tell() gives you the current position in bytes from the beginning of the file
f2.close()

我对我的python已经生疏了,不记得该怎么做了,但这是我的想法。如果有人知道如何真正做到这一点,那么请更新我的代码。如果你有任何问题,请告诉我,我会尽力澄清的

相关问题 更多 >