|
from zipfile import ZipFile |
|
from subprocess import Popen |
|
from os import path , getenv , kill |
|
from shutil import rmtree |
|
import argparse |
|
from tkinter.filedialog import askopenfilename |
|
import socket |
|
import atexit |
|
def check_port(port:int,host:str) -> bool: |
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
try: |
|
s.settimeout(1) |
|
s.connect((host, port)) |
|
s.close() |
|
return True |
|
except (socket.timeout, ConnectionRefusedError): |
|
return False |
|
argparser = argparse.ArgumentParser() |
|
argparser.add_argument("-p","--port",type=int,default=12345,help="port number") |
|
argparser.add_argument("-a","--host",type=str,default="localhost",help="host address") |
|
argparser.add_argument("-i","--image",type=str,help="app image") |
|
args = argparser.parse_args() |
|
folder = getenv("LOCALAPPDATA")+"\\"+f"JenilSoftware_{args.host}_{args.port}" |
|
process = None |
|
def kill_process(): |
|
if process: |
|
kill(process.pid) |
|
rmtree(folder) |
|
atexit.register(kill_process) |
|
try: |
|
if path.exists(folder): |
|
rmtree(folder) |
|
image = None |
|
if not check_port(args.port,args.host): |
|
if args.image: |
|
image = args.image |
|
else: |
|
image = askopenfilename(filetypes=[("Application Image",["*.png"])],defaultextension=".png") |
|
ZipFile(image).extractall(folder) |
|
process = Popen([folder+r"\main","-p",str(args.port),"-a",str(args.host),"-m","2"],shell=True) |
|
process.wait() |
|
else: |
|
raise Exception("port is not available for app") |
|
except Exception as e: |
|
print(e) |
|
rmtree(folder) |
|
|