Ошибка в коде 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)

   test(0)

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

   simplified_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 % simplified_file


def test(flag):
    print flag
    while flag!=1:
        x=1
    return

Этот метод заполнения программы mod_python отправляет текст для показа метода, где он записывает данные в файл input.txt, который используется моим приложением, пока мое приложение не запустится, я не хочу, чтобы остальные операторы работали, поэтому яВызвал функциональный тест, в котором у меня есть цикл while, который будет непрерывно повторяться до тех пор, пока флаг не будет установлен в 1. Если его значение равно 1, он прервет цикл while и продолжит выполнение остальных операторов.Я сделал так, чтобы мое приложение передавало переменную флага теста, чтобы установить его как 1. Согласно моей логике, он должен разорвать цикл и вернуться к функции show и продолжить выполнение rest, но это не происходит таким образом, это непрерывная загрузка страницы!

Пожалуйста, помогите мне через это ..

Спасибо ..:)

Ответы [ 2 ]

2 голосов
/ 14 мая 2011
    while flag!=1:
        x=1

Этот цикл никогда не закончится. Когда flag когда-либо изменится так, что flag != 1 будет ложным? Помните, что flag - это локальная переменная, поэтому ее изменение в другом месте не даст никакого эффекта - тем более что никакой другой код не будет иметь возможности для запуска, пока этот цикл еще работает.

На самом деле не очень понятно, чего вы пытаетесь достичь здесь. Вы не должны пытаться задерживать код с бесконечными циклами. Я бы тщательно продумал вашу архитектуру.

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

это не самый элегантный способ сделать это, но если вам нужно изменить значение флага вне вашего метода, вы должны использовать его как переменную global.

def test():
    global flag        # use this everywhere you're using flag.
    print flag
    while flag!=1:
        x=1
    return

но чтобы создать метод ожидания, взгляните на объекты Python Event () , у них есть метод wait (), который блокирует, пока не установлен флаг события.

...