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中获取更新的数据。
我尝试了很多,但无法弄明白,请通过这个帮助我:)
谢谢:)
答案 0 :(得分:0)
假设您有三个不同的请求同时进入您的应用程序。所有这些人都将尝试同时写入相同的文件。
要使您的上述代码能够处理并发请求,您需要为每个请求/响应使用唯一的文件名。想出一个改变策略,包括输入和输出文件的文件名中的唯一标识符(例如时间戳+客户端IP地址)。