是否可以通过网页在服务器上启动python脚本?
在工作中,我已经使用selenium编写了一个简单的python脚本来完成日常工作(打开网页并单击一些按钮)。
我希望能够远程启动此程序(仍在公司网络上),但是由于工作中的安全性/权限,我不能使用telnet / shh / etc或安装PHP(我读过的方法是一种做到)。
我之前已经制作了简单的python服务器,可以发送/接收REST请求,但是我找不到使用javascript(我比较满意)从网页发送消息的方法。 我找到了一些可以建议AJAX的搜索结果,但我无法使其正常工作
它不必是空白页面上只有一个按钮的空白页面,它向我的服务器发送一个请求,服务器随后又启动了脚本。
感谢您的帮助。
答案 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框架中,例如Flask或Django。 考虑到您的代码相对较小并且不需要在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脚本,因此您可能只想导入相关的函数并直接调用它们,而不是通过子进程,只需注意资源泄漏并确保您的函数清除了所有内容。不需要在请求之间保留的资源。