gpt4 book ai didi

python - os.stat(path).st_mtime 实际上如何获取文件修改时间?

转载 作者:行者123 更新时间:2023-12-01 01:48:15 26 4
gpt4 key购买 nike

在此示例中,我使用的是在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com