首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGIHTTPRequestHandler在python中运行php或python脚本

CGIHTTPRequestHandler在python中运行php或python脚本
EN

Stack Overflow用户
提问于 2011-03-17 08:58:38
回答 4查看 9.8K关注 0票数 4

我在windows上写了一个简单的python web服务器。

它可以工作,但现在我想运行动态脚本(php或py),而不仅仅是html页面。

下面是我的代码:

代码语言:javascript
复制
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文件夹中,我会得到页面,但代码不会被解释

我要做什么?谢谢

EN

回答 4

Stack Overflow用户

发布于 2011-03-20 06:28:53

我觉得你有点太过工程学了。

代码语言:javascript
复制
#!/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()
票数 4
EN

Stack Overflow用户

发布于 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文件夹中。这些文件位于本方法文档的正文中。

目录结构应如下所示:

代码语言:javascript
复制
|
-- [simple_server]
      |
      -- server.py
      |
      -- [cgi-bin]
            |
            -- my_cgi_script.py

您需要设置my_cgi_script.py的权限才能使其可执行-否则web服务器无法运行它来生成网页输出。如果您使用的是Linux或MacOS,请在命令shell中输入:

代码语言:javascript
复制
$ chmod +x cgi-bin/my_cgi_script.py

在Windows上,使用文件资源管理器找到该文件,然后右键单击该文件,并确保其权限允许执行。

打开命令外壳,然后通过cd进入simple_server文件夹并执行server.py脚本:

代码语言:javascript
复制
$ cd simple_server
$ python server.py

到目前为止,它应该静默运行,没有任何输出。然后,在您喜欢的浏览器的新选项卡中,浏览到以下URL:

代码语言:javascript
复制
http://localhost:8000/cgi-bin/my_cgi_script.py

“你好,世界!”在浏览器中应该出现大量的空白作为网页(如果你不能立即看到它,请在左上角查找它)。好了,你做到了!你已经用Python CGI创建了你的第一个网站!

server.py

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
<!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>

目录结构现在应该如下所示:

代码语言:javascript
复制
|
-- [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

票数 3
EN

Stack Overflow用户

发布于 2011-03-19 14:56:38

你把php文件变成可执行文件了吗??chmod +x spam.php (对于Linux,我不知道如何使文件在windows上可执行)

您还需要在PC上安装PHP解释器

来自回复HERE的源

您还应该考虑使用THIS作为间接替代方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5333632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档