Как читать текст из входного файла только после его обновления с помощью Python - PullRequest
1 голос
/ 14 мая 2011

На самом деле, я передам входные данные из моего application1 в input.txt, который выполняет триггеры {used pyinotify} program1 для запуска этой программы1, которая обновляет файл output.txt, но application1, которая читает файл output.txt, не ждет программычтобы завершить процесс записи в текстовый файл (output.txt), он считывает старые данные из output.txt.Мне нужно Application1, чтобы ждать завершения процесса program1, как я могу это сделать ??

import pyinotify,subprocess
def onChange(ev):
    cmd = ['/usr/bin/env', 'python','/var/www/cgi-bin/version2_1.py', ev.pathname]
    subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch('/var/www/cgi-bin/input.txt', pyinotify.IN_CLOSE_WRITE, onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()

Это программа, которую я использовал для запуска моей программы python1 в фоновом режиме при триггере для ввода текста, сразу после этого триггера приложение 1 выполнит этот оператор out_file=open("/var/www/cgi-bin/output.txt", "r").read()

Теперьapplication1 получает содержимое вывода до того, как оно будет обновлено программой!Я хочу, чтобы Aplication1 дождался завершения работы программы1 и обновления через output.txt

. Пожалуйста, дайте мне понять, как мне это сделать ..

Спасибо:)

1 Ответ

3 голосов
/ 14 мая 2011

Существует несколько способов наблюдать за изменениями файлов в Python, большинство из которых зависят от платформы. Поскольку вы не указали свою платформу, вот кроссплатформенный пакет: http://packages.python.org/watchdog/

Вам также следует взглянуть на ответы на этот вопрос: Как посмотреть файл на предмет изменений?

Редактировать

Из часто задаваемых вопросов inotify:


В: В чем разница между IN_MODIFY и IN_CLOSE_WRITE? Событие IN_MODIFY генерируется при изменении содержимого файла (например, через системный вызов write ()), в то время как IN_CLOSE_WRITE происходит при закрытии измененного файла. Это означает, что каждая операция изменения вызывает одно событие IN_MODIFY (оно может происходить много раз при манипуляциях с открытым файлом), тогда как IN_CLOSE_WRITE выдается только один раз (при закрытии файла).

В: Лучше использовать IN_MODIFY или IN_CLOSE_WRITE? Это варьируется от случая к случаю. Обычно более целесообразно использовать IN_CLOSE_WRITE, потому что, если он получен, все изменения в соответствующем файле безопасно записываются в файл. Событие IN_MODIFY не обязательно означает, что изменение файла завершено (данные могут остаться в буферах памяти в приложении). С другой стороны, многие журналы и подобные файлы должны отслеживаться с использованием IN_MODIFY - в тех случаях, когда эти файлы постоянно открыты и, следовательно, IN_CLOSE_WRITE не может быть отправлено.


Вы уверены, что наблюдаете за IN_CLOSE_WRITE? Если вы наблюдаете IN_MODIFY, то я не удивлюсь, если вы получите событие до того, как записанные данные будут сброшены в файл.

...