在 python 中监控文件是否停止写入

2024-02-22

我有一个程序每秒不断写入文件。文件写入是在与 UI 并行的线程中进行的。由于某些硬件问题,它有时会停止写入。我想检查文件是否停止写入,如果没有更新则重新启动程序。我想检查文件的时间戳,看看它是否没有更新(并且不想访问看门狗等,因为我只需要文件是否停止写入。)

try:
    if time.time()>(os.stat(filename).st_mtime+2):
        raise ValueError("Yikes! Spike")
except ValueError:
    with open('errors.log','a') as log:
        log.write('Spike occured at '+ time.strftime(
        "%H:%M:%S")+' on '+datetime.date.today().strftime('%d/%m/%Y')+'\n')
        log.close()
    restart_program()

该块每秒运行一次。但这适得其反,当应用程序关闭以重新启动时,它每秒都会关闭并且不会再次启动。我每秒都会收到记录的异常消息。我尝试增加时差,但这没有帮助。

接下来我尝试了

ftimestamp = os.stat(filename).st_mtime
try:
    if os.stat(filename).st_mtime>=ftimestamp:
        ftimestamp = time.time()
        print "ftimestamp updated and all is well"
    else:
        ftimestamp = os.stat(filename).st_mtime
        raise ValueError("Yikes! Spike!")
        print "file time is behind"
except ValueError:
    with open('errors.log','a') as log:
        log.write('Spike occured at '+ time.strftime(
        "%H:%M:%S")+' on '+datetime.date.today().strftime('%d/%m/%Y')+'\n')
        log.close()
    restart_program()

我尝试将变量“ftimestamp”更新为当前时间“time.time()”,因为下一次比较仅在一秒后发生,并且我希望文件时间高于上一次比较的时间。 (该块通过 wx.CallLater 函数每秒运行一次)。

我的程序仍然失败...而且我不明白我哪里出了问题...请有人帮忙!或者有没有一种方法可以简单地检查文件是否停止写入?


我们可以尝试通过执行以下操作来检查文件大小的变化作为可能的解决方案:

import os
from time import sleep
# other imports

while True:
    file1 = os.stat('file.txt') # initial file size
    file1_size = file1.st_size
 
    # your script here that collects and writes data (increase file size)
    sleep(1)
    file2 = os.stat('file.txt') # updated file size
    file2_size = file2.st_size
    comp = file2_size - file1_size # compares sizes
    if comp == 0:
        restart_program()
    else:
        sleep(5)

您可能需要调整sleep()相应地,这些只是我正在使用的估计,因为我无法测试您的实际代码。最后,这是一个无限循环,只要您希望脚本继续写入,它就会继续运行。

另一种解决方案是将您的代码更新为:

import os
import sys
from time import sleep
# other imports

while True:
    file1 = os.stat('file.txt') # initial file size
    file1_size = file1.st_size
 
    # your script here that collects and writes data (increase file size)
    sleep(1)
    file2 = os.stat('file.txt') # updated file size
    file2_size = file2.st_size
    comp = file2_size - file1_size # compares sizes
    if comp == 0:
        sys.exit
    else:
        sleep(5)

然后使用辅助程序来运行脚本,如下所示:

import os
from time import sleep, strftime

while True:
    print(strftime("%H:%M:%S"), "Starting"))
    system('main.py') # this is another infinite loop that will keep your script running
    print(strftime("%H:%M:%S"), "Crashed"))
    sleep(5)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 中监控文件是否停止写入 的相关文章

  • Django 是否使用一个线程来处理 WSGI 或 Gunicorn 中的多个请求?

    根据标题 我想知道 Django 在通过 WSGI 或 Gunicorn 运行时是否使用一个线程来处理多个请求 我知道从不应该访问的地方访问请求是一种不好的做法 但我仍然想这样做 我认为有充分的理由 例如在我的自定义模板加载器中访问当前用户
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • AttributeError:模块“pandas”没有属性“read_csv”Python3.5

    我已经成功使用pandas read csv很久以来 当我尝试读取 csv 文件时 突然开始出现错误 df pd read csv file csv encoding utf 8 错误是 AttributeError module pand
  • 当图例位于轴之外时选择 matplotlib 图例

    当我修改 legend picking py 示例时 我遇到了一个有趣的怪癖 其中图例位于轴之外 如下所示 leg ax legend loc upper left fancybox True shadow True leg ax lege
  • Python:按条件绘制多个正/负条形图

    这是我第一次用 python 绘制条形图 我的 df 操作 key descript score 0 noodles taste 5 1 noodles color 2 2 noodles health 3 3 apple color 7
  • 具有相同内容的拆分列表

    例如我有以下列表 contents i have two pens prices 5 made in and 我想将它们分开 使其具有与以下内容相同的内容 array 0 i have two pens array 1 prices 5 a
  • 单击一次文件丢失

    将 Clickonce 与 VS 2010 和 NET Framework Client profile 3 5 一起使用 我有几个文件夹 其中包含运行时所需的应用程序级 XML 和 或文本文件 这些文件夹位于要使用它们的同一项目中 这些文
  • PHP上传问题

    我使用了一些脚本来开始在我的开发计算机上上传文件 问题是 尽管此操作预期很容易 但每当我尝试上传图像时 Apache 似乎都会超时 上传设置为On和tmp目录设置在php ini 我尝试上传主要内容gif来自谷歌 一个8 36KB图像 它应
  • Python Raspberry pi - 如果路径不存在,则跳过循环

    我有一个收集温度 文本文件中的值 的功能 它使用部分预定义的路径 但是 有时如果温度传感器未加载 断开连接 则路径不存在 如果路径不可用 如何设置条件或例外来跳过循环 我想使用 continue 但我不知道要设置什么条件 def read
  • Flask-Mail - 基于 Flask-Cookiecutter 异步发送电子邮件

    我的烧瓶项目基于烧瓶饼干切割机 https github com sloria cookiecutter flask我需要异步发送电子邮件 发送电子邮件的功能由以下配置米格尔的教程 https blog miguelgrinberg com
  • 如何从分组数据创建直方图

    我正在尝试根据 pandas 中的分组数据创建直方图 到目前为止 我已经能够创建标准线图 但我不知道如何做同样的事情来获取直方图 条形图 我想获得泰坦尼克号事故中幸存者和未幸存者的 2 个年龄直方图 看看年龄分布是否存在差异 来源数据 ht
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 构建一个简单的解析器,能够使用 PyParse 解析不同的日期格式

    我正在构建一个简单的解析器 它接受如下查询 显示 fizi 从 2010 年 1 月 1 日到 2006 年 2 月 11 日的提交 到目前为止我有 class QueryParser object def parser self stmn
  • 在 Python 中快速确定小于 10 亿的数字是否为素数

    我目前在 python 中检查数字素数的算法对于 1000 万到 10 亿之间的数字来说速度很慢 我希望它能够得到改进 因为我知道我永远不会得到超过 10 亿的数字 背景是我无法获得足够快的实现来解决项目 Euler 的问题 60 我在 7
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • 从 Java 应用程序读取的文件是否会调用系统调用?

    我的理解是 请求文件系统路径 例如 aFile 的用户应用程序将调用文件系统并获取所请求文件的虚拟地址 然后应用程序将尝试以该地址作为参数 即作为 CPU 指令 进行读 写操作 执行读取命令时 内存管理单元会将该地址转换为物理地址 并查看页
  • Unpivot Pandas 数据

    我目前有一个DataFrame布置为 Jan Feb Mar Apr 2001 1 12 12 19 2002 9 2003 我想将数据 逆透视 使其看起来像 Date Value Jan 2001 1 Feb 2001 1 Mar 200
  • 如何在 Python 中将 .docx 转换为 .txt

    我想将大量 MS Word 文件转换为纯文本格式 我不知道如何在 Python 中做到这一点 我在网上找到了以下代码 我的路径是本地路径 所有文件名都类似于 cx xxx 即 c1 000 c1 001 c2 000 c2 001 等 fr
  • 从多个大型 NetCDF 文件中提取数据的快速/高效方法

    我只需要从全局网格中提取特定节点集的数据 由纬度 经度坐标 按 5000 10000 的顺序 给出 这些数据是水力参数的时间序列 例如波高 全局数据集很大 因此分为许多 NetCDF 文件 每个 NetCDF 文件大小约为 5GB 包含整个
  • 为什么 Python ggplot 返回名称“aes”未定义?

    当我使用以下命令时 p ggplot aes x DTM y TMP1 data data 我收到以下错误 NameError name aes is not defined 你可以帮帮我吗 你需要导入aes from ggplot imp

随机推荐