CGIHTTPServer: 错误代码 403

2 投票
2 回答
3257 浏览
提问于 2025-04-16 22:02

我遇到了一个问题:

错误响应,错误代码403。信息:CGI脚本不可执行 ('/cgi-bin/main.pyc')。错误代码解释:403 = 请求被禁止——即使有授权也没用。

我在尝试运行一个编译过的Python脚本(.pyc文件)在Python的CGIHTTPServer上时出现了这个问题。普通的Python脚本(.py文件)运行得很好。 CGI服务器的设置如下:

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

class CGIServer(HTTPServer):
    def __init__(self, (hostname,port), handler):
        HTTPServer.__init__(self, (hostname, port), handler)
srvaddr = ("", 8000)
cgisrv = CGIServer(srvaddr,CGIHTTPRequestHandler)
cgisrv.serve_forever()

在Windows上有没有可能让这个工作?.pyc文件在Windows上和.py文件一样被链接。连谷歌也没法告诉我更多。

谢谢

2 个回答

0

你需要写一个小的包装器(用普通的Python)来加载其他代码作为模块。

想了解更多细节,可以看看Python教程[1]及其评论:

  • 程序从“.pyc”或“.pyo”文件运行并不会比从“.py”文件运行快;“.pyc”或“.pyo”文件唯一快的地方是它们加载的速度。

  • 当你在命令行中通过名字运行一个脚本时,这个脚本的字节码不会被写入“.pyc”或“.pyo”文件。因此,通过把大部分代码放到一个模块里,并用一个小的启动脚本来导入这个模块,可以减少脚本的启动时间。

顺便说一下,我刚刚用一个脚本和那个脚本的编译版本测试了CGIHTTPServer。我遇到了你提到的错误,当我在命令行中运行这两个版本时,运行.py版本输出了预期的结果,而运行.pyc版本则在终端上打印了一堆垃圾(我没有去调查具体原因)。总之,作为基本测试,确保你能在命令行中运行一个程序。

[1] http://docs.python.org/release/1.5.1p1/tut/node43.html

0

.pyc 文件是经过编译的 Python 脚本,主要是为了独立运行的。我比较确定的是 CGIHTTPServer 不能运行编译后的 Python 文件,只能运行后缀为 .py 的脚本。

有没有什么原因让你不能使用 .py 文件呢?

撰写回答