25

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

我想从我的一个系统中创建一个网页,该网页仅显示几个按钮,允许我远程启动这些脚本。

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

file_arranger.py

我需要做什么才能让网页执行该脚本?这不适合公共消费,所以任何轻量级的东西都会很棒。对于奖励积分,我需要查看哪些内容才能为 Web 用户提供此类脚本的输出?

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

4

9 回答 9

5

python 站点上的此页面对运行 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 服务器,请查看这些配置步骤

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

于 2009-01-15T23:16:36.507 回答
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...

于 2009-01-16T11:55:58.947 回答
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

于 2009-01-15T23:02:23.633 回答
1

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

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

另一种选择是简单地告诉操作系统使用 os.system() 触发命令。 在此处查看使用 os.system() 的不同方法的示例。

于 2009-01-15T23:05:05.623 回答
1

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

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

这尤其适用于您所描述的非交互式私人管理任务,并允许您从 shell 中使用相同的程序,而无需大惊小怪。您的驱动程序,即带有按钮的页面,可以是具有单按钮表单的静态 HTML 文件。甚至是链接列表。

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

不要输出您自己的 HTML 并跳到使用许多现有库中的一个——即使花费一些额外的时间来学习该库,也会省去很多麻烦。或者至少通过有效地编写您自己的迷你引擎来封装您的输出。

于 2009-01-16T00:05:09.620 回答
0

如果您了解 Apache ,这应该可以帮助您入门。

于 2009-01-15T23:13:59.943 回答
0

在较早的问题中,我要求将 AJAX 网站连接到 Python的最小实现。这可能会完成您正在寻找的东西。它有一个按钮,可以触发一些 Python 代码,然后在页面上显示结果。我的解决方案使用 Python 中的内置网络服务器,所以它真的很轻量级(没有额外的包甚至 Apache)。

于 2009-01-15T23:15:52.827 回答
0

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

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

于 2009-01-16T01:26:21.173 回答
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>")
于 2016-07-21T15:12:54.863 回答