python - os.stat(path).st_mtime 如何实际获取文件修改时间?
问题描述
在此示例中,我使用的是使用安装的 Python 3.6.5pyenv
的是在 OSX shell 中安装的 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
命令如何导致两次打印,我不倾向于相信它以任何方式绑定到那个。
有任何想法吗?
解决方案
您的循环是一个繁忙的等待循环,因此它可以非常快速地捕捉到几次时间变化。
当 python 创建文件 ( open
) 时,它会设置/更新创建时间。
但是关闭文件时会再次更新创建时间。这解释了您捕获 2 次更新。
touch
只需设置一次修改时间,但echo
与您的python脚本相同:在创建/打开现有文件时设置修改时间,并在关闭时再次设置。
繁忙的循环和打开/关闭操作会产生竞争条件,并且您看到的更新次数是未定义的(这说明您的脚本cat
在数据较小的命令中错过了一次更新)
推荐阅读
- javascript - assert.isBoolean 没有传递给 tinyint
- assembly - 如何在程序集/C 内核中管理分页?
- android - 约束流量百分比无法正常工作
- python - 有没有办法从 TimeToGuess 类访问我的guesses_left 变量,以便我需要检查它们是否用完猜测
- r - R没有从CSV导入所有行
- django - 如何在 django 中将上下文变量放入模板标签 - 修改 Wagtail Menus 模板标签
- c# - 多个连接到同一 TransactionScope 中的同一 DB
- ios - 如何在 Swift 中为 OTP 倒计时
- ios - 更改 UIAlertViewController 色调颜色
- windows - windows azure vm 将端点暴露给互联网