Запустите скрипт Python на сервере с веб-страницы - PullRequest
2 голосов
/ 12 марта 2019

Есть ли способ запустить скрипт Python на сервере с веб-страницы?

На работе я создал простой скрипт Python, использующий селен для выполнения рутинной работы (откройте веб-страницу и нажмите несколькокнопки).

Я хочу иметь возможность запустить это удаленно (все еще в сети компании), но из-за безопасности / разрешений здесь на работе я не могу использовать telnet / shh / etc или установить PHP (который я 'Мы читаем, это один из способов сделать это.)

Ранее я создал простые серверы Python, которые могут отправлять / получать REST-запросы, но я не могу найти способ использовать JavaScript (что я несколькоудобно) отправлять с веб-страницы.Я нашел несколько результатов поиска, где люди предлагают AJAX, но мне не удается заставить его работать

Это не должно быть чем-то большим, чем пустой страницей с одной кнопкой, которая отправляет запросна мой сервер, который в свою очередь запускает скрипт.

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 12 марта 2019

Есть несколько способов начать работу. Вы можете попробовать обслужить свой скрипт Python через CGI .

В качестве альтернативы вы можете заключить ваш скрипт в веб-фреймворк, такой как Flask или Django . Принимая во внимание тот факт, что ваш код относительно небольшой и не требует хранения данных в SQL или взаимодействия с пользователем, вы должны использовать Flask, потому что он довольно легкий и хорошо документирован в Интернете.

0 голосов
/ 12 марта 2019

Вообще говоря, вы хотите написать простой сервер, который возвращает HTML-форму по запросу GET и обрабатывает эту форму по запросу POST.

Например, очень упрощенный, но полностью рабочий пример с использованием Бутылка :

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()

В любом случае, поскольку вы написали сценарий Selenium на Python, вы можете просто импортировать соответствующую функцию и вызывать их напрямую, а не проходить через подпроцесс, просто следите за утечками ресурсов и убедитесь, что ваша функция очищает любые ресурсы, которые не нужно хранить между запросами.

0 голосов
/ 12 марта 2019

Мой пример использует 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 

Ссылка: Колба

...