[英]Python CGI script - redirect doesn't always work
我正在为一个分配(Python 2.4)的作业编写一个小的CGI脚本,该作业采用表格数据,并使用它运行shell命令,然后根据其工作情况显示自己页面的一个或另一个版本。 例如,如果添加评论,它将重新加载页面的“项目”版本,而不是“所有项目列表”视图,并包含新评论。 程序中有几个应该重新加载的地方。 在一个地方它起作用而在一个地方它没有起作用,我在竭尽全力试图看到差异。
if mode == "change":
if newcomment != "":
comment_command = "some shell command \"" + item + "\" " + comment
os.system(comment_command)
if rating != "":
rate_command = "same command \"" + item + "\" " + rating
os.system(rate_command)
# this NEVER works!
print "%s%s" % ("Location:http://blahblah/cgi-bin/myproject.cgi?item=", urllib.quote_plus(item))
elif mode == "newitem":
add_command = "command \"" + newitem + "\""
result = os.system(add_command)
retcode = os.WEXITSTATUS(result)
# redirect depending on results
if retcode == 1:
# this one always works!
print "%s%s" % ("Location:http://blahblah/cgi-bin/myproject.cgi?item=", urllib.quote_plus(newitem))
else:
print("Location:http://blahblah/cgi-bin/myproject.cgi")
我希望这足以完成代码。 我不明白为什么它在一个地方而不是另一个地方起作用。 我会假定它忽略了重定向,并且“忽略”了重定向尝试,只是?item= version
确实可以在一个地方工作。 关于os.system我是否不了解?
检查并确保您确实没有在location标头之前输出任何内容。 如果在此之前没有任何输出,那么您实际上不会获得位置标头做任何事情。
如果您的命令os.system打印任何内容,则Location标头可能无效。
import subprocess; subprocess.Popen(command, shell=True).communicate()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.