如何使用 `python -m SimpleHTTPServer 8000` 或 `python -m CGIHTTPServer 8000` 托管 Python CGI 脚本?

23

当我在命令行中运行python -m SimpleHTTPServer 8000python -m CGIHTTPServer 8000时,我将当前目录的内容托管到互联网上。

我希望通过上述命令在命令行中浏览到192.xxx.x.xx:8000/cgi_script.py时,以下能够正常工作。

#!/usr/bin/env python
print "Content-Type: text/html"
print
print """\
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
"""
但是这个脚本被字面显示了,不仅仅只有“Hello World!”这部分。 顺便说一下,我将cgi_script.py文件的权限更改为755,以及它所在的文件夹。

对于在 Mac 或 Linux 上尝试此操作的用户,请确保具有允许执行文件的权限。换句话说:chmod +x cgi-bin/cgi_script.py - greggles
6个回答

35

尝试使用python -m CGIHTTPServer 8000

请注意,您必须将脚本移动到cgi-binhtbin目录中以便能够运行。


这很遗憾地没有改变任何事情。(我不明白为什么没有改变)。 - Bentley4
@Bentley4 - 请查看有关CGI目录的更新答案。 - rodrigo
1
@Bentley4 - 我的错!应该是 cgi-bin(使用源代码!)。已更正。对我有效。但请注意,URL 应相应更改为:http://xxxx:8000/cgi-bin/cgi_script.py - rodrigo
谢谢!我明白我哪里出错了。我必须从cgi-bin目录下一级的目录中运行python -m CGIHTTPServer 8000。如果你在cgi-bin目录下运行它,它就不会工作,很奇怪。 - Bentley4
2
@Bentley4 - 这并不奇怪,这是一种经典的旧限制,以避免将未打算以此方式使用的随机程序运行为CGI。 - rodrigo
显示剩余2条评论

6

由于Stack Overflow不允许我评论,因此我将其作为rodrigo的补充答案单独添加。

您可以使用另一个参数cgi_directories,其默认值为['/cgi-bin', '/htbin']。更多信息请参见此处


2
在Python3中,命令行只是简单的:
python3 -m http.server --cgi 8000

1
请将脚本放置在“/cgi-bin”目录下。 - AchimG
5
您的命令出错,错误信息为 Unknown option: -p。这是因为您把http.server当作一组短选项使用了。但实际上不是这样用的。正确的方法是 python -m http.server --cgi 8000。请注意区分。 - josch

0

0

@Bentley4 - 如果你还不能做到,尝试导入cgi。

#!C:\Python34\python.exe -u import cgi print ("Content-type:text/html")

希望对你有所帮助


0
当我遇到这个问题时,我发现取决于您运行python -m CGIHTTPServer 8000命令时所在的目录,会产生不同的结果。当尝试在cgi-bin目录中运行该命令时,浏览器继续返回原始脚本代码。一旦我将目录切换到更高一级并再次运行python -m CGIHTTPServer 8000命令,我的脚本开始执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接