ප්ලාස්ක් මත කුඩා පිටුපස දොරක් හෝ දේශීය ජාලයක පරිගණකයක් පාලනය කරන්නේ කෙසේද

හෙලෝ, හබ්ර්!

මම මෑතකදී “Flask හි ඔබේම වෙබ් යෙදුමක් සාදා ගන්නේ කෙසේද” ක්‍රමලේඛන ප්‍රවාහයේ බාගත කළ අනුවාදයක් නැරඹුවෙමි. තවද මම යම් ව්‍යාපෘතියක මගේ දැනුම තහවුරු කර ගැනීමට තීරණය කළෙමි. දිගු කලක් තිස්සේ මම ලිවිය යුත්තේ කුමක්දැයි නොදැන සිටි අතර අදහස මා වෙත පැමිණියේය: "ඇයි ෆ්ලැස්ක්හි කුඩා පසුපස දොරක් සාදා නොගන්නේ?"

පසුපස දොරේ ක්රියාත්මක කිරීම් සහ හැකියාවන් සඳහා පළමු විකල්පයන් වහාම මගේ හිසෙහි පෙනී සිටියේය. නමුත් මම වහාම පසුපස දොර හැකියාවන් ලැයිස්තුවක් සෑදීමට තීරණය කළෙමි:

  1. වෙබ් අඩවි විවෘත කරන්නේ කෙසේදැයි දැන ගන්න
  2. විධාන රේඛා ප්රවේශය ඇත
  3. වැඩසටහන්, ඡායාරූප, වීඩියෝ විවෘත කිරීමට හැකි වන්න

එබැවින්, පළමු කරුණ වෙබ් බ්‍රව්සර් මොඩියුලය භාවිතයෙන් ක්‍රියාත්මක කිරීම අතිශයින්ම පහසුය. os මොඩියුලය භාවිතයෙන් දෙවන කරුණ ක්රියාත්මක කිරීමට මම තීරණය කළෙමි. තුන්වෙනි එකත් os මොඩියුලය හරහා, නමුත් මම "සබැඳි" භාවිතා කරන්නම් (ඒ ගැන වැඩි විස්තර පසුව).

සේවාදායකයක් ලිවීම

එබැවින්, සියලුම සේවාදායක කේතය *drumroll*:

from flask import Flask, request
import webbrowser
import os
import re

app = Flask(__name__)
@app.route('/mycomp', methods=['POST'])
def hell():
    json_string = request.json
    if json_string['command'] == 'test':
        return 'The server is running and waiting for commands...'
    if json_string['command'] == 'openweb':
        webbrowser.open(url='https://www.'+json_string['data'], new=0)
        return 'Site opening ' + json_string['data'] + '...'
    if json_string['command'] == 'shell':
        os.system(json_string['data'])
        return 'Command execution ' + json_string['data'] + '...'
    if json_string['command'] == 'link':
        links = open('links.txt', 'r')
        for i in range(int(json_string['data'])):
            link = links.readline()
        os.system(link.split('>')[0])
        return 'Launch ' + link.split('>')[1]
if __name__ == '__main__':
    app.run(host='0.0.0.0')

මම දැනටමත් සියලුම කේතයන් ඉවත් කර ඇත, සාරය පැහැදිලි කිරීමට කාලයයි.

සියලුම කේතය 5000 වරායේ දේශීය පරිගණකය මත ධාවනය වේ. සේවාදායකය සමඟ අන්තර් ක්‍රියා කිරීමට, අපි JSON POST ඉල්ලීමක් යැවිය යුතුය.

JSON ඉල්ලීම් ව්‍යුහය:

{‘command’:  ‘comecommand’, ‘data’: ‘somedata’}

හොඳයි, 'විධානය' යනු අපට ක්‍රියාත්මක කිරීමට අවශ්‍ය විධානය බව අර්ථවත් කරයි. තවද 'දත්ත' යනු විධාන තර්ක වේ.

ඔබට සේවාදායකය සමඟ අතින් අන්තර් ක්‍රියා කිරීමට JSON ඉල්ලීම් ලිවීමට සහ යැවීමට හැකිය (ඉල්ලීම් ඔබට උපකාරී වනු ඇත). නැතහොත් ඔබට කොන්සෝල සේවාදායකයක් ලිවිය හැකිය.

සේවාදායකයෙකු ලිවීම

කේතය:

import requests

logo = ['nn',
        '******      ********',
        '*******     *********',
        '**    **    **     **',
        '**    **    **     **      Written on Python',
        '*******     **     **',
        '********    **     **',
        '**     **   **     **      Author: ROBOTD4',
        '**     **   **     **',
        '**     **   **     **',
        '********    *********',
        '*******     ********',
        'nn']

p = ''
iport = '192.168.1.2:5000'
host = 'http://' + iport + '/mycomp'

def test():
    dict = {'command': 'test', 'data': 0}
    r = requests.post(host, json=dict)
    if r.status_code == 200:
        print (r.content.decode('utf-8'))

def start():
    for i in logo:
        print(i)

start()
test()

while True:
    command = input('>')
    if command == '':
        continue
    a = command.split()
    if command == 'test':
        dict = {'command': 'test', 'data': 0}
        r = requests.post(host, json=dict)
        if r.status_code == 200:
            print (r.content.decode('utf-8'))
    if a[0] == 'shell':
        for i in range(1, len(a)):
            p = p + a[i] + ' '
        dict = {'command': 'shell', 'data': p}
        r = requests.post(host, json=dict)
        if r.status_code == 200:
            print (r.content.decode('utf-8'))
        p = ''
    if a[0] == 'link':
        if len(a) > 1:
            dict = {'command': 'link', 'data': int(a[1])}
            r = requests.post(host, json=dict)
            if r.status_code == 200:
                print (r.content.decode('utf-8'))
        else:
            print('Комманда не содержит аргументов!')
    if a[0] == 'openweb':
            if len(a) > 1:
                dict = {'command': 'openweb', 'data': a[1]}
                r = requests.post(host, json=dict)
                if r.status_code == 200:
                    print (r.content.decode('utf-8'))
            else:
                print('Комманда не содержит аргументов!')
    if a[0] == 'set':
        if a[1] == 'host':
            ip = a[2] + ':5000'
    if command == 'quit':
        break

පැහැදිලි කිරීම්:

පළමුවෙන්ම, ඉල්ලීම් මොඩියුලය ආයාත කර ඇත (සේවාදායකය සමඟ අන්තර් ක්රියා කිරීම සඳහා). ආරම්භක සහ පරීක්ෂණ කාර්යයන් පිළිබඳ විස්තර පහත දැක්වේ. ඉන්පසු මායාව සිදු වන චක්‍රය. ඔබ කේතය කියවා තිබේද? ඉතින් චක්‍රයේ සිදුවන මායාවේ තේරුම ඔබට වැටහෙනවා ඇති. විධානය ඇතුල් කරන්න - එය ක්රියාත්මක වේ. Shell - විධාන රේඛාව සඳහා විධාන (තර්කය පරිමාණයෙන් බැහැර වේ).

පරීක්ෂණය - සේවාදායකය ක්‍රියාත්මක වේද යන්න පරීක්ෂා කරන්න (පසුපස)
සබැඳිය - "කෙටිමං" භාවිතය
Openweb - වෙබ් අඩවියක් විවෘත කිරීම
ඉවත් වන්න - සේවාදායකයාගෙන් ඉවත් වන්න
සකසන්න - දේශීය ජාලයේ ඔබේ පරිගණකයේ ip සැකසීම

දැන් සබැඳිය ගැන වැඩි විස්තර.

සේවාදායකය අසල link.txt ගොනුවක් ඇත. එය ගොනු (වීඩියෝ, ඡායාරූප, වැඩසටහන්) වෙත සබැඳි (සම්පූර්ණ මාර්ගය) අඩංගු වේ.

ව්යුහය මේ වගේ ය:

полный_путь>описание
полный_путь>описание

ප්රතිඵලය

දේශීය ජාලයක (wi-fi ජාලයක් තුළ) පරිගණකයක් පාලනය කිරීම සඳහා අපට පසුබිම් සේවාදායකයක් ඇත. තාක්ෂණික වශයෙන්, අපට පයිතන් පරිවර්තකයක් ඇති ඕනෑම උපාංගයකින් සේවාදායකයා ධාවනය කළ හැකිය.

PS I විසින් සැකසූ විධානය එකතු කරන ලද අතර එමඟින් ප්‍රාදේශීය ජාලයේ පරිගණකයකට වෙනත් IP එකක් පවරා ඇත්නම්, එය සේවාදායකයා තුළ කෙලින්ම වෙනස් කළ හැකිය.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න