我在windows上写了一个简单的python web服务器。
它可以工作,但现在我想运行动态脚本(php或py),而不仅仅是html页面。
下面是我的代码:
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
class RequestsHandler(CGIHTTPRequestHandler):
cgi_directories = ["/www"] #to run all scripts in '/www' folder
def do_GET(self):
try:
f = open(curdir + sep + '/www' + self.path)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(f.read())
f.close()
except IOError:
self.send_error(404, "Page '%s' not found" % self.path)
def main():
try:
server = HTTPServer(('', 80), RequestsHandler)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__ == '__main__':
main()如果我将php代码放在www文件夹中,我会得到页面,但代码不会被解释
我要做什么?谢谢
发布于 2011-03-20 06:28:53
我觉得你有点太过工程学了。
#!/usr/bin/env python
import CGIHTTPServer
def main():
server_address = ('', 8000)
handler = CGIHTTPServer.CGIHTTPRequestHandler
handler.cgi_directories = ['/cgi']
server = CGIHTTPServer.BaseHTTPServer.HTTPServer(server_address, handler)
try:
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__ == '__main__':
main()发布于 2020-04-11 16:14:52
您的第一个Python CGI网站
对于制作他们的第一个web服务器的人,我将这个简单的示例与使其工作所需的所有步骤放在一起。需要创建两个文件。首先,server.py是运行web服务器的脚本。第二个是Python CGI脚本,服务器将运行该脚本并将其输出作为“网页”发送到浏览器。
首先,为服务器创建一个项目文件夹,类似于您的主目录中的simple_server,或者您想要放置项目的任何位置。
在该文件夹中创建一个名为cgi-bin的子文件夹。然后将第一个脚本复制到文件server.py并将其放在simple_server中。然后创建文件my_cgi_script.py并将其放在cgi-bin文件夹中。这些文件位于本方法文档的正文中。
目录结构应如下所示:
|
-- [simple_server]
|
-- server.py
|
-- [cgi-bin]
|
-- my_cgi_script.py您需要设置my_cgi_script.py的权限才能使其可执行-否则web服务器无法运行它来生成网页输出。如果您使用的是Linux或MacOS,请在命令shell中输入:
$ chmod +x cgi-bin/my_cgi_script.py在Windows上,使用文件资源管理器找到该文件,然后右键单击该文件,并确保其权限允许执行。
打开命令外壳,然后通过cd进入simple_server文件夹并执行server.py脚本:
$ cd simple_server
$ python server.py到目前为止,它应该静默运行,没有任何输出。然后,在您喜欢的浏览器的新选项卡中,浏览到以下URL:
http://localhost:8000/cgi-bin/my_cgi_script.py“你好,世界!”在浏览器中应该出现大量的空白作为网页(如果你不能立即看到它,请在左上角查找它)。好了,你做到了!你已经用Python CGI创建了你的第一个网站!
server.py
from http.server import HTTPServer, CGIHTTPRequestHandler
if __name__ == '__main__':
try:
CGIHTTPRequestHandler.cgi_directories = ['/cgi-bin']
httpd = HTTPServer(('', 8000), # localhost:8000
CGIHTTPRequestHandler) # CGI support.
print(f"Running server. Use [ctrl]-c to terminate.")
httpd.serve_forever()
except KeyboardInterrupt:
print(f"\nReceived keyboard interrupt. Shutting down server.")
httpd.socket.close()cgi-bin/my_cgi_script.py
#!/usr/bin/env python
# The line above ^ is important. Don't leave it out. It should be at the
# top of the file.
import cgi, cgitb # Not used, but will be needed later.
print("Content-type: text/html\n\n")
print("hello world!")如果你让它运行起来,你可能会想‘刚才发生了什么?’server.py已安装并正在运行web服务器。它被配置为使用CGIHTTPRequestHandler运行脚本。此请求处理程序将cgi-bin文件夹中的文件作为脚本运行。它使用命令shell来执行此操作。
在Python的顶部,#!/usr/bin/env python行告诉命令外壳使用my_cgi_script.py解释器执行文件中的代码。
您在浏览器中输入的URL被服务器理解为文件的路径-在本例中为cgi-bin文件夹下的CGI脚本my_cgi_script.py:http://localhost:8000/cgi-bin/my_cgi_script.py
如果您查看运行服务器的命令shell,您可以看到详细说明它所处理的web流量的消息。每次您访问此服务器进程时,它都会输出更多消息-继续,在浏览器中尝试刷新并查看它。
你现在可以修改my_cgi_script.py来输出更多的文本,或者你可以让它输出HTML标签并生成一个更有趣的网页。
要创建包含CGI脚本的网页,请创建一个名为index.html的文件,并将其放在包含server.py的文件夹中- index.html的内容如下所示。
index.html
<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<!-- Simple example to include text from the CGI script in this web page. -->
<object type="text/html" data="/cgi-bin/my_cgi_script.py"></object>
</body>
</html>目录结构现在应该如下所示:
|
-- [simple_server]
|
-- server.py
|
-- index.html
|
-- [cgi-bin]
|
-- my_cgi_script.py完成后,如果您停止了服务器进程,请再次启动它并尝试浏览http://localhost:8000并验证您是否看到了"hello world!“在“我的第一段”下面index.html是一个特殊的文件名,web服务器将其用作默认页面。现在,您已经具备了创建一个优秀网站的所有基础知识!
展望未来,对于最好的web开发框架应该是什么,或者说是严肃的开发,有不同的意见。从这个示例中,您应该了解非常基本的配置、设置和浏览器/服务器交互。
那么,现在的问题是,从这里到哪里去?您可以继续使用上述模型,并学习如何使用Python CGI脚本将更多功能添加到基本站点中,并将它们绑定到HTML页面中的表单操作。这将是一条完全有效的道路,你可能会学到很多东西。
有人向我推荐了一个很好的网站,它使用了一个叫做Django的生产质量的web服务器。据我所知,它有非常好的教程和其他资源来帮助开始web开发。
那个网站是Django Girls Tutorial。不要因为站点的名称而放弃,任何人都可以从本教程中受益,它提供了一个非常好的介绍,介绍了使用Django进行web开发所需的工具和技术。
Django Girls是一个活跃的女性开发者社区,在世界各地举办活动,并将她们与其他可以帮助她们进步的人联系起来。
Django女孩教程:https://tutorial.djangogirls.org/en/
更深入的Python CGI示例:https://www.tutorialspoint.com/python/python_cgi_programming.htm
要学习超文本标记语言,这个网站有很好的教程:https://www.w3schools.com/html/default.asp
CGI支持模块的参考,cgi:https://docs.python.org/3/library/cgi.html
包含本示例中使用的类的文档可在以下位置找到:https://docs.python.org/2/library/internet.html
发布于 2011-03-19 14:56:38
你把php文件变成可执行文件了吗??chmod +x spam.php (对于Linux,我不知道如何使文件在windows上可执行)
您还需要在PC上安装PHP解释器
来自回复HERE的源
您还应该考虑使用THIS作为间接替代方案。
https://stackoverflow.com/questions/5333632
复制相似问题