2011-05-14 3 views
0
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 프로그램의 fill 메소드는 내 응용 프로그램이 실행될 때까지 내 응용 프로그램에서 사용하는 input.txt 파일에 기록하는 메소드를 보여주기 위해 텍스트를 전송합니다. 나머지 문장은 작동하지 않기를 원합니다. 함수 테스트는 플래그가 1로 설정 될 때까지 반복적으로 반복되는 while 루프를가집니다. 1로 설정된 경우 while 루프를 중단하고 나머지 명령문을 계속 실행합니다. 내 로직에 따라 테스트 플래그 변수를 전달하기 위해 응용 프로그램을 만들었습니다. 루프를 중단하고 함수를 표시하고 나머지를 계속 실행해야하지만 그 방법으로는 일어나지 않습니다. 지속적으로 페이지가로드됩니다! mod_python 코드의 오류!

이를 통해 저를 도와주세요 ..

감사합니다 .. :)

+0

논리에 대해 다시 생각해 볼 필요가 있습니다. 응답자가 지적했듯이,'test' 함수는 단순히 영원히 돌아가서 돌아 가지 않을 것입니다. 당신이 그것을 어디에서 부르든 상관 없습니다. 만약 당신이 그것을 '1'로 부르지 않는다면 결코 끝나지 않을 것입니다. –

답변

2
while flag!=1: 
     x=1 

이 루프는 지금까지 완료되지 않습니다. flag != 1이 거짓이되도록 flag이 언제 변경됩니까? flag로컬 변수 인 변수이므로 아무 곳이나 변경하더라도 영향을 미치지 않습니다. 특히 루프가 실행되는 동안 다른 코드가 실행될 기회가 없으므로 특히 그렇습니다.

여기에서 달성하려는 내용이 실제로 명확하지 않습니다. 무한 루프를 사용하여 코드를 지연시키지 마십시오. 나는 당신의 건축을 신중하게 생각했다.

+0

파이썬으로 작성된 실제로 내 응용 프로그램은 파이썬으로 작성된 내 응용 프로그램이이 함수 테스트를 호출하고 매개 변수 1을 전송하기 때문에 실행이 끝나면 while 루프가 중단되고 메소드를 표시하고 나머지를 계속 실행해야합니다. 코드. –

+0

내 응용 프로그램에서이 파일을 가져오고 'my_program.test (1)'처럼 호출하여 사용했던 플래그에만 영향을줍니다. –

+0

제대로 이해하면 기능이 어떻게 작동하는지 근본적으로 오해하고 있습니다. 테스트 (0) 호출하면 무한 루프가 발생하므로 루프를 중단하기 위해 test (1)를 호출 할 수 없습니다. 게다가 무한 루프를 사용하여 코드의 일부를 지연시키는 것은 매우 나쁜 습관입니다. – bluepnume

0

가장 세련된 방법은 아니지만 메서드 외부에서 flag 값을 변경해야 할 경우 global 변수로 사용해야합니다.

대기 방법을 만드는하지만
def test(): 
    global flag  # use this everywhere you're using flag. 
    print flag 
    while flag!=1: 
     x=1 
    return 

, 그들은이 이벤트의 깃발까지 블록이 설정되어 대기() 메소드를 가지고 python Event() objects에 모습을 가지고있다.

+0

플래그를 로컬로 사용해야합니다. 다른 메서드를 사용하지 않아도됩니다.이 메서드는 플래그 값을 1로 설정하는 my_program.test (1)과 같은 응용 프로그램에서이 메서드를 호출했습니다. , 나는 실제로 show 메소드의 read 서술문이 애플리케이션이 끝날 때까지 기다려야한다. 이렇게했다. 반환과 관련된 문제가있다. 실제로 애플리케이션에 컨트롤을 보내고 어떻게 보내야하는지 방법을 보여주는 컨트롤? –