2011-05-14 62 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文件中,直到我的應用程序正在運行爲止我不想讓其餘的語句工作,所以我有稱爲函數測試,其中我有一個while循環,它將持續循環直到標誌被設置爲1.如果它被設置爲1,那麼它將打破while循環並繼續執行其餘的語句。 我使我的應用程序通過測試標誌變量設置爲1.根據我的邏輯,它應該打破循環,並返回到顯示功能,並繼續執行休息,但它不以這種方式發生,其連續加載頁面!mod_python代碼錯誤!

請幫我度過這個..

謝謝.. :)

+0

你真的需要再次考慮邏輯。正如答覆者指出的那樣,「測試」功能將會永遠運行,而不會返回。不管你從哪裏調用它,如果你不用'1'調用它,它永遠不會結束。 – 2011-05-14 21:16:32

回答

2
while flag!=1: 
     x=1 

這個循環永遠不會結束。 flag什麼時候會改變,所以flag != 1是假的?請記住,flag本地變量,所以在其他任何地方更改它都不會產生影響 - 特別是因爲在該循環仍在運行時沒有其他代碼有機會運行。

這真的不是很清楚你想在這裏實現什麼。你不應該試圖用無限循環延遲代碼。我會仔細考慮你的架構。

+0

其實我的應用程序是用python編寫的,它的所有工作完成後會調用這個函數測試併發送參數1,這樣它會使while循環中斷,並且它應該返回show方法並繼續執行其餘部分代碼。 – 2011-05-14 18:39:08

+0

我已經在我的應用程序中導入了這個文件,並且像這樣調用 'my_program.test(1)',這樣我用過的標誌只會受到影響。 – 2011-05-14 18:52:20

+0

如果我理解正確,你基本上誤解了函數的工作原理。調用測試(0)將導致無限循環,您不能隨後調用test(1)來打破循環。而且,使用無限循環來延遲部分代碼是非常糟糕的做法。 – bluepnume 2011-05-14 22:28:00

0

這不是最優雅的方式,但如果您需要更改方法外標誌的值,則應將其用作global變量。

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

而是要等待的方法,看看到python Event() objects,他們有阻塞,直到事件的標誌設置一個wait()方法。

+0

我必須在本地使用標誌,我不需要任何其他方法來看它,它與其他方法無關,我已經在我的應用程序中調用了此方法,如my_program.test(1),它將標誌值設置爲1 ,我實際上希望show方法的read語句等到應用程序完成它的工作,所以做了這樣的事情。我認識到有一些與返回有關的問題,它實際上將控制權發回給我的應用程序,如何使它發送控制顯示方法? – 2011-05-14 19:04:25