Простой Python-сервер
возможно, вопрос задаю некорректно, но я просто хотел бы получить пример такого сервера. Кроме того, мне непонятен принцип работы модуля cmd2.
Необходим сервер, который может принимать и обрабатывать команды, отправленные ему другой программой-клиентом (на Python) с помощью cmd2 и возвращать результат работы. Пример функции, которую должен выполнить по требованию такой сервер:
#import ramdom
def test(a, b): #вызывается cmd2-командой "-test (a) (b)"
return random.uniform(a, b)
Работа сервера
#################################################################
>>> -test 1 2145 #Высылаем команду серверу
2106.073685868508 #Получаем ответ
Ответы (1 шт):
Flask & FastAPI
Вероятно, Вам нужен fastAPI или flask. Эти сервера предоставляют REST API в качестве интерфейса для взаимодействия.
FastAPI
Я больше люблю fastAPI, так как там больше функционала идёт из коробки. Он моложе. Для работы с fastAPI Вам потребуется сам fastAPI и, например, uvicorn как asgi-сервер:
pip install fastapi uvicorn
Сервер:
from typing import Optional
from fastapi import FastAPI
import random
import uvicorn
app = FastAPI()
@app.get("/method")
def method(a: int, b: int):
return random.uniform(a, b)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
Run
Далее, Вы можете выполнить:
python app.py
или
uvicorn main:app --workers=2
где workers задаёт число работающих копий Вашего приложения, а uvicorn выступает reverse-proxy.
Теперь Вы можете зайти на http://127.0.0.1:8000/docs. Или же сразу выполнить http://127.0.0.1:8000/method?a=5&b=6, в результате чего выполнится метод /method сервера.
Client
Для того, чтобы обратиться с помощью скрипта к серверу, достаточно воспользоваться библиотекой requests:
r = requests.get('http://127.0.0.1:8000/method?a=5&b=6')
print(r.status_code) # 200
print(r.json()) # response of server
Встроенный сервер python
На последок, в python есть встроенный сервер, который я не советую использовать:
import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()