如何创建一个网页,其中的按钮可以在为网页提供服务的系统上调用各种Python脚本?

时间:2009-01-15 22:58:46

标签: python windows web-services cgi

我是一个业余爱好者(而且相当新的)程序员,他在python中编写了几个有用的(对我来说)脚本来处理涉及在其他各种活动中复制,重命名和下载文件的各种系统自动化任务。

我想创建一个从我的系统中提供的网页,它只会提供一些按钮,这些按钮可以让我远程启动这些脚本。

问题是我不知道从哪里开始调查如何做到这一点。假设我有一个名为:

的脚本

file_arranger.py

让网页执行该脚本需要做什么?这不是为了公共消费,所以任何轻量级都会很棒。对于奖励积分,我需要注意什么才能为网络用户提供这些脚本的输出?

编辑:第一个答案让我意识到我忘了包含这是一个Win2k3系统。

9 个答案:

答案 0 :(得分:5)

python站点上的

This page有一个很好的描述和运行python CGI脚本需要做的示例。首先从最简单的案例开始。只需制作一个打印html的简短脚本。

#!/usr/bin/python                   #on windows change to your path to the python exe

print "Content-Type: text/html"     # HTML is following
print                               # blank line, end of headers
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"

第一次尝试时,最困难的部分通常是确定脚本的放置位置以及如何使Web服务器识别并运行它。如果您使用的是apache Web服务器,请查看these configuration steps

一旦你有这个简单的脚本,你只需要添加一个html表单和按钮标签,并使用action属性将它指向你想要运行的脚本。

答案 1 :(得分:3)

这种简单的方法除了Python标准库之外什么都不需要。创建此目录结构:

.
|-- cgi-bin
|   `-- script.py
|-- index.html
`-- server.py

您将脚本放在“cgi-bin”目录中,“index.html”包含指向“cgi-bin”目录中脚本的链接(因此您不必手动键入它们,尽管可以),“ server.py“包含这个:

import CGIHTTPServer
CGIHTTPServer.test()

要运行服务器,只需运行“server.py”即可。就是这样,没有Apache,没有其他依赖。

... HTH

答案 2 :(得分:2)

您只需将它放在一个设置为执行CGI脚本的目录中,然后您需要添加

#!/usr/bin/env python

到顶部,如果链接到它,它应该作为普通的python脚本执行脚本。 (就像你将HTML或PHP文件一样)

当然,这假设您的网络服务器设置为完全执行CGI,并且您拥有Linux系统。

如果你想要一些更有趣的东西,还有其他的替代解决方案,比如mod_python和像Pylons这样的web框架,但我认为CGI解决方案更适合你的用例。

[编辑]

在Windows上,如果你有Apache,你应该能够使用相同的方法,但更换#!背后的东西!使用python.exe的路径,如下所示:

#!C:\Python25\python.exe -u

显然需要-u根据此链接将Python置于无缓冲模式,该链接还有更多深入信息:http://www.imladris.com/Scripts/PythonForWindows.html

答案 3 :(得分:1)

您应该将CherryPy视为您的HTTP请求处理程序,可以将其配置为在非常轻的NGINX Web服务器(或者您喜欢的Apache)上运行。

然后,您可以将其他脚本导入到您在CherryPy上运行的服务中。这将为您提供更多控制,以监控流程并在发生错误时捕获错误。

另一种选择是简单地告诉操作系统使用os.system()来触发命令。 Check here for an example使用os.system()的不同方法。

答案 4 :(得分:1)

您需要一个简单的cgi脚本(或一组脚本)才能开始使用。其他答案已经涵盖了如何做到这一点,所以我不再重复;相反,我会强调使用纯文本会让你有很长的路要走。只需输出标题(print("Content-type: text/plain\n")加上print添加自己的换行符以获得所需的空行)然后运行正常的程序。

这样,脚本的任何正常输出都会被发送到浏览器,您不必担心HTML,转义,框架等等。 “尽可能做最简单的事情。”

这特别适用于您所描述的非交互式私有管理任务,并允许您使用shell中相同的程序,而且操作起码极少。您的驱动程序(包含按钮的页面)可以是具有单键形式的静态HTML文件。甚至是一个链接列表。

要从那里开始,请查看日志记录模块(例如,将INFO消息发送到浏览器但不是命令行,或通过配置处理程序使用不同的记录器轻松地对消息进行分类),然后开始考虑模板引擎和框架。

不要输出您自己的HTML并跳过使用众多现有库中的一个 - 它会节省大量的头痛,甚至花费一些额外的时间来学习库。或者至少通过有效编写自己的迷你引擎来封装您的输出。

答案 5 :(得分:0)

如果您知道自己的方式,那么Apache this就应该开始了。

答案 6 :(得分:0)

在之前的一个问题中,我要求connecting an AJAX website to Python实现最小化。这可能会实现您的目标。它有一个触发一些Python代码的按钮,然后在页面上显示结果。我的解决方案在Python中使用内置的webserver,因此它非常轻量级(没有额外的包甚至是Apache)。

答案 7 :(得分:0)

设置时,小心限制访问在Web服务器上执行某些操作的脚本。仅将它们放在您不发布URL的目录中是不够的,因为迟早有人会找到它们。

至少,将这些脚本放在受密码保护的位置。你不希望互联网上的任何人能够运行你的脚本。

答案 8 :(得分:0)

如果您现在使用的是Python 3, print 是需要括号的功能。

#!/Python34/python
print ("Content-type: text/html\n")
print ("<html><head>")
print ("</head><body>")
print ("Hello World from Python Script.")
print ("</body></html>")