Запустите скрипт Python на сервере с веб-страницы

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

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

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

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

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

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

используя что-то вроде Flask / Django / Pyramid, настраивая @route вызывающую вас функцию :)

Fabian 12.03.2019 11:00

Что вы использовали для своих «простых серверов Python ранее, которые могут отправлять/получать запрос REST»? Возможно, вам будет легче понять ответ, основанный на предыдущем опыте.

Lie Ryan 12.03.2019 11:24

Когда-то в университете мы создали несколько серверов SimpleHTTPServer и серверов сокетов. Возможно, их было не так просто построить, но их функциональность была очень простой.

erikst 12.03.2019 11:49
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
163
3

Ответы 3

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

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

Хорошо, это похоже на то, что может сработать. (Хотя мне казалось, что я потратил целую вечность, чтобы заставить этот бит работать на окнах).

erikst 12.03.2019 11:47

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

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

Я думаю, что попробую с Flask, похоже, это предпочтительный выбор для большинства.

erikst 12.03.2019 11:51

Вообще говоря, вы хотели бы написать простой сервер, который возвращает 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, вы можете просто импортировать соответствующую функцию и вызывать их напрямую, а не проходить через подпроцесс, просто будьте осторожны с утечками ресурсов и убедитесь, что ваша функция очищает любые ресурсы, которые не используются. не нужно хранить между запросами.

Другие вопросы по теме