Хорошего код Эндрю. Мне не сообщили о существовании для/else.
Но умерить активность процессов машины, можно избежать повторного открытия и закрытия файла, и предпочтительно, чтобы охладиться частоту проверки ИМО
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() файл в указатель е должен быть возобновлен, чтобы сделать возможным написать цепочку
<font color= "#347C2C">readfalseloop2</font><br />
в конце содержимого файла.
Я не знаю, в чем заключается эта реактивация. Я знаю только, что если команда f.seek (0,1) не выполняется, процесс не может перейти из режима чтения в режим записи.
f.seek (0,1) означает «перемещение 0 символов с вашего текущего положения»; Не полезно указывать другой порядок, поскольку указатель уже находится в конце файла и что он все равно вернется в конец файла, прежде чем начинать писать, если он находится где-то в другом месте: это 'a' . Таким образом, даже если указатель будет позиционироваться снова в начале файла с помощью f.seek (0,0), запись будет выполнена в конце.
;
В случае тест если «readfalseloop2» в f.read() дает ложных, указатель должен быть перемещен на 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 линий. Python - это фантастика
Петля выглядит хорошо для меня. Что именно происходит? Если вы хотите встроить это в несколько функций, я бы поставил это в свою собственную функцию.Или вы имеете в виду, что вы каким-то образом контролируете файл журнала, и как только файл будет изменен, ваш код должен обнаружить это изменение и проверить, содержит ли он определенную строку? –
Да, это именно то, что я пытаюсь сделать. – Surfdork
Я еще не нашел рабочий пример в Интернете, как это сделать, не используя стороннюю библиотеку, которую мне не удалось сделать в Sikuli – Surfdork