繁体   English   中英

Python CGI脚本-重定向并不总是有效

[英]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标头可能无效。

  • 确保您的os.system没有输出任何内容
  • 如果应该,在打印任何数据之前,应将Location标头移到
  • 首选子进程模块,而不是os.system:
import subprocess;
    subprocess.Popen(command, shell=True).communicate()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM