#!/usr/bin/env python import re import signal import subprocess import sys import threading port = int(sys.argv[1]) p = subprocess.Popen(['lt', '-p', str(port)], stdout=subprocess.PIPE, encoding="utf-8") r = p.stdout.readline() m = re.match(r'your url is: (https://.*\.localtunnel\.me)', r) assert m, "could not get the localtunnel URL" print(m[1], flush=True) sys.stdout.close() shutdown = threading.Event() def cleanup(_sig, _frame): p.terminate() p.wait(30) shutdown.set() signal.signal(signal.SIGTERM, cleanup) signal.signal(signal.SIGINT, cleanup) shutdown.wait()