从网页在服务器上启动python脚本

时间:2019-03-12 09:57:06

标签: python html rest server

是否可以通过网页在服务器上启动python脚本?

在工作中,我已经使用selenium编写了一个简单的python脚本来完成日常工作(打开网页并单击一些按钮)。

我希望能够远程启动此程序(仍在公司网络上),但是由于工作中的安全性/权限,我不能使用telnet / shh / etc或安装PHP(我读过的方法是一种做到)。

我之前已经制作了简单的python服务器,可以发送/接收REST请求,但是我找不到使用javascript(我比较满意)从网页发送消息的方法。 我找到了一些可以建议AJAX的搜索结果,但我无法使其正常工作

它不必是空白页面上只有一个按钮的空白页面,它向我的服务器发送一个请求,服务器随后又启动了脚本。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我的示例使用Flask

由于您不需要空格,因此请打开URL,然后硒将运行。

from flask import Flask
app = Flask(__name__)

@app.route("/start")
def yourfunction():
    #start whatever you like here
    return #whatever you like to display eg. status / result 

参考:Flask

答案 1 :(得分:0)

有多种入门方法。 您可以尝试通过CGI提供Python脚本。

或者,您可以将脚本包装到Web框架中,例如FlaskDjango。 考虑到您的代码相对较小并且不需要在SQL中存储数据或与用户进行交互的事实,您应该选择Flask,因为它非常轻巧并且在网络上有很好的文档记录。

答案 2 :(得分:0)

通常来说,您希望编写一个简单的服务器,该服务器在GET请求中返回HTML表单,并在POST请求中处理该表单。

例如,使用Bottle的一个非常简单但可以正常工作的示例:

from bottle import get, post, run

from subprocess import check_output

@get('/')
def home():
    return '<form method="post"><input type="submit" value="Click me!"></form>'

@post('/')
def on_submit():
    return "Today's date is " + check_output(['date']).decode()

run(host='localhost', port=8080)

或仅将标准库中的内容与http.server一起使用,尽管有更多样板内容,但这是相同的概念:

import http.server
import socketserver

from subprocess import check_output

class Handler(http.server.BaseHTTPRequestHandler):
    def html_preamble(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()

    def do_GET(self):
        self.html_preamble()
        response = '<form method="post"><input type="submit" value="Click me!"></form>'
        self.wfile.write(response.encode('utf-8'))

    def do_POST(self):
        self.html_preamble()
        response = "Today's date is " + check_output(['date']).decode()
        self.wfile.write(response.encode('utf-8'))

PORT = 8081
with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

总而言之,由于您使用Python编写了Selenium脚本,因此您可能只想导入相关的函数并直接调用它们,而不是通过子进程,只需注意资源泄漏并确保您的函数清除了所有内容。不需要在请求之间保留的资源。