Удаленное управление python

Как можно подключить два python скрипта через интернет (сервер и клиент), где один скрипт будет отправлять команды, а другой - выполнять.

Есть какие нибудь статьи на эту тему?


Ответы (2 шт):

Автор решения: DGDays

Думаю, тебе рано или поздно пригодится)

Сервер:

# WS Сервер (базовый пример)

import asyncio # Библиотека стандартной архитектуры асинхронного ввода - вывода в Python
import websockets

async def hello(websocket, path): # На стороне сервера websocket выполняет 
    # сопрограмму обработчика hello один раз для каждого соединения
    name = await websocket.recv()
    print(f"< {name}")

    greeting = f"Привет {name}!"

    await websocket.send(greeting)
    print(f"> {greeting}") # f - Форматирование строкового литерала

start_server = websockets.serve(hello, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
# Закрывает соединение после возврата
# async/await -(специальный синтаксис для работы с промисами)
# Промис- это объект,
# представляющий возможное завершение передачи или сбой асинхронной операции
# В Python async гарантирует, что функция вернет промис и обернет в него не промисы. 

Клиент:

# WS Клиент (базовый пример)

import asyncio
import websockets

async def hello():# На стороне клиента websocket выполняет 
    # сопрограмму обработчика hello один раз для каждого соединения
    uri = "ws://localhost:8765" # URL ресурсавеб-сокета использует собственную схему начиная с 
    # ws  или wss для безопасного подключения
    async with websockets.connect(uri) as websocket:
        name = input("Введите имя : ")

        await websocket.send(name)
        print(f"> {name}") # f - Форматирование строкового литерала


        greeting = await websocket.recv()
        print(f"< {greeting}")

asyncio.get_event_loop().run_until_complete(hello())
→ Ссылка
Автор решения: Victor VosMottor

Pure TCP socket.

Server:

import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 65432        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            if data == b'say hello':
                print("hello")

Client:

import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'say hello')
→ Ссылка