Телеграм бот перестает работать после закрытия консоли (с командой bot.polling())

import telebot
import config
import time
from telebot import types



bot = telebot.TeleBot(config.TOKEN)



@bot.message_handler(content_types = ['text'])
def button(message):
    markup = types.InlineKeyboardMarkup(row_width=2)
    item9 = types.InlineKeyboardButton('9', callback_data = 'nine')
    item8 = types.InlineKeyboardButton('8', callback_data = 'eight')
    item7 = types.InlineKeyboardButton('7', callback_data = 'seven')
    item0 = types.InlineKeyboardButton('...', callback_data = '...')
    markup.add(item9, item8, item7, item0)

    bot.send_message(message.chat.id, '...', reply_markup=markup)




@bot.callback_query_handler(func=lambda call:True)
def callback(call):
    if call.message:
        if call.data == 'nine':
            bot.send_message(call.message.chat.id, '...')



bot.polling(none_stop=True)

Ответы (1 шт):

Автор решения: KoVadim

Для того, что бы такие приложения продолжали работать, их нужно "отвязать" от консоли. Иначе, как только консоль закроется, они прибиваются (на самом деле закрывается дескриптор ввода-вывода)

В случае Windows есть такая инструкция https://stackoverflow.com/questions/12843903/how-to-start-daemon-process-from-python-on-windows

Вот тут https://stackoverflow.com/questions/2970045/python-launch-a-long-running-process-from-a-web-app/2974177#2974177 есть прям готовый код.

from subprocess import Popen
from win32process import DETACHED_PROCESS

pid = Popen(["C:\python24\python.exe", "long_run.py"],creationflags=DETACHED_PROCESS,shell=True).pid
print pid
print 'done' 
#I can now close the console or anything I want and long_run.py continues!

здесь приложение (запускатеь) прямо запускает другое приложение (собственно бота) с нужными параметрами, а само умирает. Но Вам никто не мешает объеденить их в одно и просто использовать ключик (параметры командной строки).

В случае Linux https://stackoverflow.com/questions/473620/how-do-you-create-a-daemon-in-python

Также в случае Linux можно запустить такое приложение в tmux/screen, что сразу решает десятки проблем.

→ Ссылка