Python:如何在网页上显示结果?

时间:2009-10-07 20:40:38

标签: python

对于那些知道答案的人来说,这很可能是一个愚蠢的问题,但我是初学者,而且在这里:

我有一个Python脚本,我在一个带有一些参数的命令行中运行,它会打印出一些结果。假设结果是一些HTML代码。

我从来没有为网络做任何Python编程,也无法搞清楚......我需要一个页面(好吧,我知道如何将文件上传到服务器,Apache正在运行,Python安装在服务器...)有一个编辑字段,它将接受该参数,并提交按钮,我需要它在用户提交了适当的参数后在网页上“打印”结果,或者在命令中显示任何输出印刷线条。

我已经阅读了Dive Into Python关于“HTML处理”和“HTTP Web服务”的章节,但它们没有描述我正在寻找的内容。

如果答案不短,我会非常感谢链接到更相关的内容,或者谷歌的关键词。

8 个答案:

答案 0 :(得分:4)

对于这样一个简单的任务,您可能不需要超过CGI。幸运的是,Python有一个内置的cgi模块,可以做你想要的。

或者您可以查看一些最小的Web框架,例如web.py

答案 1 :(得分:3)

听起来你只需要启用CGI on apache,这几乎会将你的输出重定向到网络服务器输出。

Python确实有CGI library你可以看看它。

这是一个essay by Guido(有点过时了)

看起来很有希望的interactive instruction

P.S。

也许您可能也希望看到Google为此提供Google app engine(可能不是您想要的)

答案 2 :(得分:2)

谁的网络服务器?如果它是由Web托管公司或其他人提供的Web服务器而您无法控制它,则需要确定它们支持使用Python编写Web应用程序的方式。只知道他们有Python可用是不够的。

正如其他人所指出的那样,至少可以支持使用Python的CGI脚本。但是,CGI对于运行大型Python Web框架(如Django)并不实用。

虽然Web服务器也可能支持FASTCGI。如果是这种情况,就可以使用更大的Python Web框架,因为FASTCGI使用持久化进程,因为CGI为每个请求创建一个进程,大型Python Web框架的开销通常会使CGI的使用变得不切实际。 / p>

如果Apache服务器是由其他人使用独立的Python Web服务器(例如wsgiref)控制的,并且从Apache代理它不会是可行的,因为你无法设置Apache来执行它。

因此,了解如何使用Python来支持Web应用程序,并确定您是否只是Apache实例的用户,或者是否有一些控制权来更改其全局配置文件并重新启动它。这将决定你可以做什么和使用。

答案 3 :(得分:1)

很抱歉这么说,但HTTP网络服务您正在寻找的内容。可以这样想 - 你把一个表单放在一个网页上,一个提交按钮。这是一个接受请求的Web服务,它会对该请求进行咀嚼,并返回响应 - 这是一个html页面。您永远不必实际保存 html,它始终是动态生成的,但它仍然是html的有效页面。

请查看django http://www.djangoproject.com/以获取高质量的基于python的Web服务工具包。

理解请求/响应习惯用法的第一步是将请求视为特定格式(由CGI定义 - 即,它是GET或POST HTML动作)命令行参数集,并将响应视为特定格式的输出(HTML),它被发送,而不是stdout,但通过“电线”发送到某些浏览器。发送请求通过网络传出,并使用一些参数执行脚本,然后收回输出 - 格式化的HTML页面。

答案 4 :(得分:0)

我完全同意马特 - Django就是你想要的。 Django提供了一个完整的解决方案,以及非常精彩的文档,可以帮助您实现目标。如果您的应用程序增长并变得更加复杂,Django仍然可以工作; Django甚至适用于非常大且非常复杂的网站。

查看免费书籍The Django Book

Django的另一个好处是:如果您在Django中使用Web应用程序,则可以将其移植到Google App Engine。

答案 5 :(得分:0)

我没有读过DENT INTO PYTHON,所以也许我所说的是多余的。正如丹尼尔所说,CGI可能适合你。这些天,只有具有相当低命中数的简单东西才会出现这种情况。 Python CGI模块记录在案here。我一直使用该模块进行表单处理,只是为输出完成了打印。尽管我已经能够弄明白,这是通常的做事方式,但我没有用Python做过很多CGI。

你没有说你在做什么,所以我会说明一些可能很明显的事情:确保你告诉服务器你正在输出一个网页,你的第一个输出就是所遵循的内容类型一个空白行。通常,这可以通过以下方式完成:

print "Content-Type: text/html"
print

(对于Python 2,对于3,你需要将你的打印件打印成函数调用。)之后,你打印你的html,header,body等标签和实际内容。

答案 6 :(得分:0)

我认为Django太过分了。如果你想要了解这些东西,可以从这样简单的事情开始:

http://www.islascruz.org/html/index.php/blog/show/Python:-Simple-HTTP-Server-on-python..html

您可以将代码放在do_GET所在的位置。

答案 7 :(得分:0)

创建简单(一个)Python网页服务器的当前方法是wsgiref module

  

wsgiref是WSGI规范的参考实现,可用于向Web服务器或框架添加WSGI支持。

查看一些SO qusetionshttps://stackoverflow.com/search?q=[python]+wsgiref)了解一些代码示例和更多建议。

wsgiref example是一个很好的起点:

from wsgiref.simple_server import make_server

def hello_world_app(environ, start_response):
    status = '200 OK' # HTTP Status
    headers = [('Content-type', 'text/plain')] # HTTP Headers
    start_response(status, headers)

    # The returned object is going to be printed
    return ["Hello World"]

httpd = make_server('', 8000, hello_world_app)
print "Serving on port 8000..."

# Serve until process is killed
httpd.serve_forever()