对于那些知道答案的人来说,这很可能是一个愚蠢的问题,但我是初学者,而且在这里:
我有一个Python脚本,我在一个带有一些参数的命令行中运行,它会打印出一些结果。假设结果是一些HTML代码。
我从来没有为网络做任何Python编程,也无法搞清楚......我需要一个页面(好吧,我知道如何将文件上传到服务器,Apache正在运行,Python安装在服务器...)有一个编辑字段,它将接受该参数,并提交按钮,我需要它在用户提交了适当的参数后在网页上“打印”结果,或者在命令中显示任何输出印刷线条。
我已经阅读了Dive Into Python关于“HTML处理”和“HTTP Web服务”的章节,但它们没有描述我正在寻找的内容。
如果答案不短,我会非常感谢链接到更相关的内容,或者谷歌的关键词。
答案 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 qusetions(https://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()