# FILE: server.py import socket # IPv4 (TCP/IPv4) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # localhost 65042 sock.bind(("localhost", 65042)) # sock.listen(True) # while True: # conn, addr = sock.accept() # print('Connected by', addr) # , 1024 data = conn.recv(1024) # conn.sendall(data)
# FILE: client.py import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # sock.connect(("localhost", 65042)) sock.sendall(b"Hello, world") # , 1024 data = sock.recv(1024) # sock.close() # print(data.decode("utf-8"))
<command> [args]
dl site.ru 0 gz list list during
sock.sendall(b"Hello, world")
sock.sendall(bytes(input(), encoding="utf-8"))
from os import path host = 'localhost' port = 65042 # . - <b>Sites</b> . , , . sites_directory = path.expanduser("~") + "/Sites"
subprocess.call(args)
# FILE: httrack.py from subprocess import call from os import makedirs # import config def download(url): # ( , ), . if url.find("//"): url = url[url.find("//")+2:] # if url[-1:] == '/': url = url[:-1] site = config.sites_directory + '/' + url print("Downloading ", url, " started.") # , makedirs(config.sites_directory, mode=0o755, exist_ok=True) # HTTrack call(["httrack", url], cwd=config.sites_directory) print("Downloading is complete")
import socket import threading # import httrack import config def handle_commands(connection, command, params): if command == "dl": # (, , ) HTTrack' htt_thread = threading.Thread(target=httrack.download, args=(params[0])) # htt_thread.start() connection.sendall(b'Downloading has started') else: connection.sendall(b"Invalid request") def args_analysis(connection, args): # . "dl site.ru 0 gz" ["dl", "site.ru", "0", "gz"]. args = args.decode("utf-8").split() # [1:] - . , . handle_commands(connection=connection, command=args[0], params=args[1:]) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind((config.host, config.port)) sock.listen(True) while True: conn, addr = sock.accept() print('Connected by ', addr) data = conn.recv(1024) args_analysis(connection=conn, args=data)
dl http://verysimplesites.co.uk/
def dl_status_checker(thread, connection): if thread.isAlive: connection.sendall(b'Downloading has started') else: connection.sendall(b'Downloading has FAILED')
if command == "dl": # , <b>"0"</b> if params[1] == '0': params[1] = False else: params[1] = True # , if not params[1] and len(params) == 2: params.append(None) htt_thread = threading.Thread(target=httrack.download, args=(params[0], params[1], params[2])) htt_thread.start() # 2 , HTTrack dl_status = threading.Timer(2.0, dl_status_checker, args=(htt_thread, connection)) dl_status.start()
from subprocess import call from os import makedirs from shutil import rmtree import config def download(url, remove, archive_format): if url.find("//"): url = url[url.find("//")+2:] if url[-1:] == '/': url = url[:-1] site = config.sites_directory + '/' + url print("Downloading ", url, " started.") makedirs(config.sites_directory, mode=0o755, exist_ok=True) call(["httrack", url], cwd=config.sites_directory) print("Downloading is complete") if archive_format: if archive_format == "gz": # : <b>tar -czf /home/user/Sites/site.ru.tar.gz -C /home/user/Sites /home/user/Sites/site.ru</b> call(["tar", "-czf", config.sites_directory + '/' + url + ".tar.gz", "-C", config.sites_directory, url], cwd=config.sites_directory) elif archive_format == "bz2": call(["tar", "-cjf", config.sites_directory + '/' + url + ".tar.bz2", "-C", config.sites_directory, url], cwd=config.sites_directory) elif archive_format == "tar": call(["tar", "-cf", config.sites_directory + '/' + url + ".tar", "-C", config.sites_directory, url], cwd=config.sites_directory) else: print("Archive format is wrong") else: print("The site is not packed") if remove: rmtree(site) print("Removing is complete") else: print("Removing is canceled")
elif command == "list": # file_list = listdir(config.sites_directory) folder_list = [] archive_list = [] # , , for file in file_list: if path.isdir(config.sites_directory + '/' + file) and file != "hts-cache": folder_list.append(file) if path.isfile(config.sites_directory + '/' + file) and \ (file[-7:] == ".tar.gz" or file[-8:] == ".tar.bz2" or file[-5:] == ".tar"): archive_list.append(file) site_string = "" folder_found = False # if folder_list: site_string += "List of folders:\n" + "\n".join(folder_list) folder_found = True if archive_list: if folder_found: site_string += "\n================================================================================\n" site_string += "List of archives:\n" + "\n".join(archive_list) if site_string == "": site_string = "Sites not found!" connection.sendall(bytes(site_string, encoding="utf-8"))
from os import listdir, path
data = sock.recv(65536)
dl http://verysimplesites.co.uk/ 1 gz
dl http://example.com/ 0
list
List of folders: example.com ================================================================================ List of archives: verysimplesites.co.uk.tar.gz
Source: https://habr.com/ru/post/268993/
All Articles