@utsiye

Как перезапустить весь скрипт с ботом?

Как мне перезапустить скрипт из этого же скрипта? Вот что я пытался сделать, но не получается:
@bot.callback_query_handler(func=lambda call: call.data.startswith("restart_admin"))
def restart_admin_handler(call: types.CallbackQuery):
    try:
        def restart():
            time.sleep(3)
            os.system("python main.py")
        threading.Thread(target=restart).start()
        sys.exit()
    except:
        form_exception(cursor, bot, call.message.chat.id)
    else:
        send_restarted_successfuly(bot, call.message.chat.id)


Выдает:
sys.exit()
SystemExit

А после:
telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону
import sys, os
def restart():
    os.execl(sys.executable, 'python', __file__, *sys.argv[1:])
    exit()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Похоже на проблему XY.
Можно так:
def payload(counter):
    if input(counter):
        raise ZeroDivisionError
    counter += 1
    return counter


def repeater():
    
    cnt = 0
    while True:
        try:
            cnt = payload(cnt)
        except ZeroDivisionError:
            print('\ncode restarted')
            repeater()
            

repeater()


Можно еще так:
def repeate(func):
    cnt = 0
    while True:
        try:
            cnt = func(cnt)
        except ZeroDivisionError:
            print('\ncode restarted')
            func()

@repeate
def payload(counter=0):
    if input(counter):
        raise ZeroDivisionError
    counter += 1
    return counter

payload()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы