Причина, по которой сценарий «зависает», заключается в том, что pyngrok
запускает ngrok
с потоком для отслеживания журналов, а процесс Python не может завершиться, пока все потоки не будут обработаны. Вы можете остановить поток монитора, как показано здесь, в документации , или, если он вам не нужен, вы можете предотвратить его запуск в первую очередь:
import os, re
from pyngrok import ngrok
from pyngrok.conf import PyngrokConfig
def server():
os.system('kill -9 $(pgrep ngrok)')
ngrok.connect(443, "tcp", pyngrok_config=PyngrokConfig(monitor_thread=False))
while True:
ngrok_tunnels = ngrok.get_tunnels()
url = ngrok_tunnels[0].public_url
if re.match("tcp://[0-9]*.tcp.ngrok.io:[0-9]*", url) is not None:
print("your url is : " + url)
break
Однако это все равно не сделает то, что вы хотите. Если вы это сделаете, да, вы вернетесь обратно в консоль, но при этом процесс ngrok
также будет остановлен, так как на данный момент это подпроцесс Python. Чтобы туннели оставались открытыми, нужно оставить процесс запущенным.