|
import argparse |
|
import json |
|
from pyngrok import ngrok, conf |
|
import os |
|
import psutil |
|
import signal |
|
import socket |
|
import sys |
|
import subprocess |
|
|
|
def get_saved_data(): |
|
try: |
|
with open('data.json', 'r') as file: |
|
data = json.load(file) |
|
return data |
|
except (FileNotFoundError, json.JSONDecodeError): |
|
return None |
|
|
|
def save_data(data): |
|
with open('data.json', 'w') as file: |
|
json.dump(data, file) |
|
|
|
def signal_handler(sig, frame): |
|
print('You pressed Ctrl+C!') |
|
sys.exit(0) |
|
|
|
def is_port_in_use(port): |
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: |
|
return s.connect_ex(('127.0.0.1', port)) == 0 |
|
|
|
def find_and_terminate_process(port): |
|
for process in psutil.process_iter(['pid', 'name', 'connections']): |
|
for conn in process.info.get('connections', []): |
|
if conn.laddr.port == port: |
|
print(f"Port {port} is in use by process {process.info['name']} (PID {process.info['pid']})") |
|
try: |
|
process.terminate() |
|
print(f"Terminated process with PID {process.info['pid']}") |
|
except psutil.NoSuchProcess: |
|
print(f"Process with PID {process.info['pid']} not found") |
|
|
|
def main(): |
|
target_port = 7860 |
|
|
|
if is_port_in_use(target_port): |
|
find_and_terminate_process(target_port) |
|
else: |
|
print(f"Port {target_port} is free.") |
|
|
|
parser = argparse.ArgumentParser(description='Console app with token and domain arguments') |
|
parser.add_argument('--token', help='Specify the token') |
|
parser.add_argument('--domain', help='Specify the domain') |
|
parser.add_argument('--reset', action='store_true', help='Reset saved data') |
|
|
|
args = parser.parse_args() |
|
|
|
saved_data = get_saved_data() |
|
|
|
if args.reset: |
|
if saved_data is not None: |
|
saved_data = { 'token': '', 'domain': ''} |
|
else: |
|
if saved_data is not None: |
|
if args.token: |
|
saved_data['token'] = args.token |
|
if args.domain: |
|
saved_data['domain'] = args.domain |
|
else: |
|
saved_data = { 'token': '', 'domain': ''} |
|
|
|
if args.token is None: |
|
if saved_data and saved_data['token']: |
|
args.token = saved_data['token'] |
|
else: |
|
args.token = input('Enter the token: ') |
|
if args.token == '': |
|
args.token = input('Enter the token: ') |
|
saved_data['token'] = args.token |
|
|
|
if args.domain is None: |
|
args.domain = '' |
|
if saved_data and saved_data['domain']: |
|
args.domain = saved_data['domain'] |
|
else: |
|
args.domain = input('Enter the domain: ') |
|
saved_data['domain'] = args.domain |
|
|
|
save_data(saved_data) |
|
|
|
print(f'Token: {args.token}') |
|
print(f'Domain: {args.domain}') |
|
|
|
if args.token != '': |
|
ngrok.kill() |
|
srv = ngrok.connect(target_port, pyngrok_config=conf.PyngrokConfig(auth_token=args.token), |
|
bind_tls=True, domain=args.domain).public_url |
|
print(srv) |
|
|
|
signal.signal(signal.SIGINT, signal_handler) |
|
print('Press Ctrl+C to exit') |
|
cmd = 'cd facefusion; python run.py --execution-providers cuda' |
|
env = os.environ.copy() |
|
subprocess.run(cmd, shell=True, env=env) |
|
signal.pause() |
|
else: |
|
print('An ngrok token is required. You can get one on https://ngrok.com') |
|
|
|
if __name__ == '__main__': |
|
main() |
|
|