- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在此示例中,我使用的是在 OSX shell 中使用 pyenv
安装的 Python 3.6.5。
我一直在尝试一些概念证明文件监视代码,我认为使用文件当前和上次测量的增量 st_mtime
足以“检测”文件已更改.
代码:
import os
def main():
file_path = 'myfile.txt'
last_modified = os.stat(file_path).st_mtime
while True:
check_last_modified = os.stat(file_path).st_mtime
delta = check_last_modified - last_modified
if delta != 0.0:
print("File was modified.")
last_modified = check_last_modified
if __name__ == '__main__':
main()
奇怪的是,不同类型的基本文件修改操作都会导致“文件已修改”。打印多次。
假设 myfile.txt
存在,我会根据操作获得不同数量的打印:
它打印 1 次:$ touch myfile.txt
它打印 2 次:$ echo ""> myfile.txt
。
打印 1 次:
$ cat <<EOF > myfile.txt
> EOF
它打印 2 次(空行):
$ cat <<EOF > myfile.txt
>
> EOF
使用 python 写入空字符串打印 1 次:
def main():
with open('myfile.txt', 'w') as _file:
_file.write('')
if __name__ == '__main__':
main()
使用 python 写入非空字符串打印 2 次:
def main():
with open('myfile.txt', 'w') as _file:
_file.write('a')
if __name__ == '__main__':
main()
最大的区别似乎是存在除换行符之外的字符串,但是看到 echo
命令如何导致两次打印,我不倾向于相信它在任何情况下都与此绑定(bind)。方式。
有什么想法吗?
最佳答案
您的循环是一个繁忙的等待循环,因此它可以很快捕获多个时间更改。
当 python 创建文件(打开
)时,它会设置/更新创建时间。
但是当关闭文件时,创建时间会再次更新。这说明您捕获了 2 次更新。
touch
仅设置一次修改时间,但 echo
的作用与 Python 脚本相同:在创建/打开现有文件时设置修改时间,然后再次设置关闭它时。
繁忙循环和打开/关闭操作会产生竞争条件,并且您看到的更新次数未定义(这解释了您的脚本错过了 cat
命令中的一个更新,其中数据较小)
关于python - os.stat(path).st_mtime 实际上如何获取文件修改时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51004461/
我有一个程序想要检查文件是否已被修改。 regtest 失败,事实上,尽管文件已更改,st_mtime 却没有!此外,外部统计数据也证实了这一点。 我相信 st_mtime 应该改变,因为 stat(
为什么这个程序在 Ubuntu 中构建时会产生语法错误? #include "stdio.h" #include "stdlib.h" #include "string.h" #inc
我正在尝试在 Cygwin 中使用 Python 3.8 获取文件的最后修改时间。 所以如果我执行 stat .profile 我会得到: File: .profile Size: 1236
我正在做一个fstat在我的文件描述符上并将其转储到 struct stat 。我阅读了 fstat 的文档(链接如下),它声称有成员 st_atime和st_mtime . http://pubs.
我在使用msync时遇到一个问题。非常感谢您的帮助! 简而言之,我映射文件A,并修改它和msync,但st_mtime没有改变。即使munmap文件A并退出进程,st_mtime也不变。 以下是代码。
我想从结构stat中显示我的两个属性 struct stat { dev_t st_dev; /* ID of device containing file */ ino_t
在此示例中,我使用的是在 OSX shell 中使用 pyenv 安装的 Python 3.6.5。 我一直在尝试一些概念证明文件监视代码,我认为使用文件当前和上次测量的增量 st_mtime 足以“
从 stat() 调用检索到的修改时间转换为 datetime 对象的最惯用/最有效的方法是什么?我想出了以下(python3): from datetime import datetime, tim
当我使用 O_CREAT 标志在 UNIX 中创建或打开文件时,st_mtime、st_ctime 和 st_atime文件发生变化。但是,当我使用 O_TRUNC 标志创建或打开文件时,只有 st_
我需要将 st_mtime 转换为字符串格式以将其传递给 java 层,我尝试使用此示例 http://www.cplusplus.com/forum/unices/10342/但是编译器产生错误 i
对于我的计算机科学课,我们正在 C 程序中实现“ls”功能,并且需要使用 st_mtime 字段。然而,当我使用 struct stat 时,它只有一个 st_mtim 字段,而不是我需要的 st_m
我是一名优秀的程序员,十分优秀!