所以我有一个功能python脚本执行一些sysadmin自动化任务。你给它一个主机名,它就会关闭并做它的事情,SSH服务器并将消息打印到控制台。将此与浏览器支持相结合而不是在终端中运行的有什么好的技术方法?实际上,所需要的只是网页上的输入框(对于服务器主机名),可以直接运行脚本,然后将标准输出打印到浏览器。
答案 0 :(得分:2)
实际上你不需要太多。您需要部署执行脚本的Web服务器,脚本应将输出作为HTTP响应而不是写入STDOUT
。
话虽这么说,你可以使用Python的内置SimpleHTTPServer
作为初学者。它是一个非常基本的Web服务器(可以改进),已经在Python的标准库中为您编写。我宁愿将它用于sysadmin和Intranet任务而不是Apache,因为它很容易设置并开始服务。
您可能需要扩展它,以便在运行脚本的请求到来时,它知道如何处理它。 SimpleHTTPServer
可能不适合这里,但您可以扩展BaseHTTPServer
或CGIHTTPServer
来完成脚本执行。
在脚本方面,你需要修改输出的目标,没有比这更聪明了。它可能需要一些重构但不多。
请注意,BaseHTTPServer
并非专注于安全性,因此请在安全的环境中使用此功能,否则可能会损害公司的数据。
我可以了解更多详情,因为问题相当大,但我就是这样做的。
希望它有所帮助!
答案 1 :(得分:2)
SimpleHTTPServer
没问题,但顾名思义,它非常简单。尝试微框架,例如Flask
,其中包括网络服务器和帮助程序,以便您更轻松地完成工作。脚本不能简单:
from tools import thingamajig
from flask import Flask, request
app = Flask(__name__)
@app.route('/go-go-gadget', methods=['POST','GET'])
def index():
if request.method == 'POST':
ip_address = request.form['ip_address']
results = thingamajig.do(ip_address)
return render('index.html', results=results)
return render('index.html')
if __name__ == '__main__':
app.run()
现在只需创建一个templates/
目录,然后在其中添加一个文件index.html
,其中包含以下内容:
<form method="POST">
<input type="text" name="ip_address" />
<input type="submit">
</form>
{% if results %}
Here are the results: {{ results }}
{% endif %}
现在只需python server.py
并转到http://localhost:5000/go-go-gadget