|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from argparse import ArgumentParser
|
|
from zipfile import ZipFile
|
|
from subprocess import Popen, PIPE
|
|
from shutil import rmtree
|
|
import atexit
|
|
|
|
argparser = ArgumentParser()
|
|
argparser.add_argument("-i", "--image", type=str, help="app image", required=True)
|
|
argparser.add_argument("-p", "--port", type=int, default=12345, help="port number")
|
|
argparser.add_argument("-f", "--folder", type=str, default="appfolder", help="app folder")
|
|
argparser.add_argument("-a", "--address", type=str, default="0.0.0.0", help="address to listen on")
|
|
args = argparser.parse_args()
|
|
folder = args.folder
|
|
rmtree(folder, ignore_errors=True)
|
|
atexit.register(lambda: rmtree(folder, ignore_errors=True))
|
|
|
|
ZipFile(args.image).extractall(folder)
|
|
try:
|
|
process = Popen([folder + "\\main", "-p", str(args.port), "-a", str(args.address)], stdout=PIPE, stderr=PIPE, shell=True)
|
|
while True:
|
|
output = process.stdout.readline()
|
|
if output == b"" and process.poll() is not None:
|
|
break
|
|
if output:
|
|
if "Running a app" in output.decode():
|
|
print("Setup complete")
|
|
process.wait()
|
|
except Exception as e:
|
|
print(f"An error occurred: {e}")
|
|
finally:
|
|
rmtree(folder) |