В этом примере я использую Python 3.6.5, установленный с использованием pyenv
в оболочке OSX.
Я возился с некоторым доказательством кода просмотра концептуального файла, и я подумал, что использования дельты текущего и последнего измерения файла 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
Он печатает 1 раз, используя python, чтобы написать пустую строку:
def main():
with open('myfile.txt', 'w') as _file:
_file.write('')
if __name__ == '__main__':
main()
Он печатает 2 раза, используя python, чтобы написать непустую строку:
def main():
with open('myfile.txt', 'w') as _file:
_file.write('a')
if __name__ == '__main__':
main()
Самым большим отличием, по-видимому, является наличие строки, отличной от новой строки, но, учитывая, что команда echo
приводит к двум выводам, я не склонен полагать, что она каким-либо образом связана с этим.
Есть идеи?