Хороший код Андрей. Мне не сообщили о существовании возможности for / else .
Но, чтобы умерить активность процессов машины, можно избежать повторного открытия и закрытия файла, и предпочтительно снизить частоту проверки IMO
from time import sleep
with open(WebPath + SmokeTest,'a+') as f:
while True:
if 'readfalseloop2' in f.read():
f.seek(0,1)
f.write('\n<font color= "#347C2C">readfalseloop2</font><br />')
print True
break
print '~',
f.seek(0,0)
sleep(2)
Этот код работает, я проверял. Но только если изменение выполняется с помощью другой программы. Когда я попытался изменить файл, вставив
<font color= "#347C2C">readfalseloop2</font><br />
цепочка вручную, Windows отказалась закрывать файл с изменением.
.
После f.read () указатель файла f должен быть повторно активирован, чтобы можно было написать
<font color= "#347C2C">readfalseloop2</font><br />
цепочка в конце содержимого файла.
Я не знаю, в чем состоит эта реактивация. Я только знаю, что если инструкция f.seek (0,1) не выполнена, процесс не может переключиться из режима чтения в режим записи.
f.seek (0,1) означает «перемещение 0 символов из вашей текущей позиции»; Бесполезно отдавать другой порядок, так как указатель уже находится в конце файла и что он все равно вернется в конец файла, прежде чем начать писать в случае, если он был где-то еще: это «a» характеристика режима. Таким образом, даже если указатель будет снова помещен в начале файла с помощью f.seek (0,0), запись будет выполнена в конце.
;
В случае проверки , если readfalseloop2 в f.read () дает False , указатель должен быть перемещен на f.seek (0,0) в самое начало файла для нового последующего чтения содержимого всего файла.
.
Предупреждение: я не знаю, что может произойти, если файл записан в utf-8, потому что в utf-8 символы не представлены одинаковой длиной в байтах, это зависит от символа. На мой взгляд, он должен работать правильно даже с utf-8
.
EDIT
Я нашел более понятный и короткий код:
from time import sleep
with open(WebPath + SmokeTest,'r+') as f:
while not 'readfalseloop2' in f.read():
print '~',
f.seek(0,0)
sleep(2)
f.seek(0,1)
f.write('\n<font color= "#347C2C">readfalseloop2</font><br />')
print 'True'
или
from time import sleep
with open(WebPath + SmokeTest,'r') as f, open(WebPath + SmokeTest,'a') as g:
while not 'readfalseloop2' in f.read():
print '~',
f.seek(0,0)
sleep(2)
g.write('\n<font color= "#347C2C">readfalseloop2</font><br />')
print 'True'
8 строк. Питон фантастический