Как заставить mod_python ждать обновления текстового файла для чтения? - PullRequest
0 голосов
/ 14 мая 2011
import cgi

def fill():
   s = """\
<html><body>
<form method="get" action="./show">
<p>Type a word: <input type="text" name="word">
<input type="submit" value="Submit"</p>
</form></body></html>
"""
   return s

# Receive the Request object
def show(req):
   # The getfirst() method returns the value of the first field with the
   # name passed as the method argument
   word = req.form.getfirst('word', '')
   print "Creating a text file with the write() method."
   text_file = open("/var/www/cgi-bin/input.txt", "w")
   text_file.write(word)
   text_file.close()
   # Escape the user input to avoid script injection attacks
   #word = cgi.escape(word)

   '''Input triggers the application to start its process'''

   output_file=open("/var/www/cgi-bin/output.txt", "r").read()
   s = """\
<html><body>
<p>The submitted word was "%s"</p>
<p><a href="./fill">Submit another word!</a></p>
</body></html>
"""
   return s % output_file

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

Я много пробовал, но не смог понять, Пожалуйста, помогите мне через это:)

Спасибо:)

1 Ответ

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

Допустим, у вас есть три разных запроса, которые поступают в ваше приложение одновременно. Все они будут пытаться записывать и читать из одних и тех же файлов одновременно .

Чтобы ваш код работал с параллельными запросами, вам нужно использовать уникальные имена файлов для каждого запроса / ответа. Разработайте стратегию изменения, включающую уникальный идентификатор (например, отметку времени + IP-адрес клиента) в именах файлов для ваших входных и выходных файлов.

...