Как отдавать json генерируемый скриптом браузеру?
У меня есть python скрипт который выводит нужную мне информацию прямо в консоль.
А мне хотелось бы поднять минимальные веб-сервер, который вы при переходе по ссылке типа: http://ip.my.server?parametr1=1¶metr2=2 запускал нужную мне команду и отдавал на экран json
сейчас мой скрипт запускается через консоль такой командой: myPythonScript parametr1 parametr2
прощу прощения если вопрос глупый, я только сегодня начал знакомство с Python.
Мой сервер работает на Ubuntu 22.04
Ответы (1 шт):
Простой сайт можно сделать на flask (pip install flask)
У вас уже есть скрипт на питоне, пусть будет myPythonScript.py. Сейчас он принимает аргументы и запускает по ним логику.
Теперь, чтобы его использовать на сервере у вас 2 пути:
Вы можете не трогать его и запускать через
subprocess:from subprocess import Popen, PIPE process = Popen([program, 'myPythonScript.py', parametr1, parametr2], stdout=PIPE, shell=True) result = process.communicate()[0].decode().strip() print(result)Переменные
parametr1иparametr2заранее создаетеИмпортировать его в скрипт сервера и вызывать у него функцию, что обработает параметры:
import myPythonScript result = myPythonScript.run(parametr1, parametr2) print(result)Переменные
parametr1иparametr2заранее создаете. А вmyPythonScript.pyдолжна быть функцияrun, что принимает параметры и возвращает результатА чтобы ограничить код, который при импорте не должен выполняться, добавляете условие
if __name__ == '__main__':(как у сервера)
Останется, добавить один из вариантов в скрипт сервера и выполнять в index
Пример:
from flask import Flask, request
app = Flask(__name__)
@app.route("/")
def index():
args = request.args
return {
'status': 'ok',
'parametr1': args.get('parametr1'),
'parametr2': args.get('parametr2'),
}
if __name__ == '__main__':
app.run()
Перешел по http://127.0.0.1:5000/?parametr1=1¶metr2=2
И сайт вернул {"parametr1":"1","parametr2":"2","status":"ok"} с заголовком Content-Type: application/json
PS.
По-умолчанию, flask сортирует ключи json, чтобы отключить это нужно добавить:
app.config['JSON_SORT_KEYS'] = False