Телеграм бот перестает работать после закрытия консоли (с командой 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 шт):
Для того, что бы такие приложения продолжали работать, их нужно "отвязать" от консоли. Иначе, как только консоль закроется, они прибиваются (на самом деле закрывается дескриптор ввода-вывода)
В случае 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, что сразу решает десятки проблем.