Python в то время как True предотвращает предыдущее выполнение кода - PullRequest
0 голосов
/ 14 мая 2018

Я создаю бот-телеграмму, используя telepot (python), и произошла странная вещь:

, поскольку бот должен продолжать работать, я установил

while 1:
    time.sleep(.3)

в конце моего бота, сразу после того, как я определю, как обрабатывать MessageLoop.

У бота есть print(), чтобы утверждать, что бот настраивается (или, что лучше, настраивает обработчик сообщений) и что он читает чат, ожидая ввода.

Проблема в том, что если я запустил код без

while 1:
    time.sleep(.3)

он печатает сообщения и останавливает выполнение (не имея цикла для ожидания нового ввода), но если я добавлю while 1: (...), код останавливается, прежде чем можно будет что-либо напечатать.

Вот код:

"""Launch the bot."""
import json
import telepot
from telepot.loop import MessageLoop
import time
from base import splitter
from base import handler

messageHandler = handler.Handler()

with open('triggers.json') as f:
    triggers = json.load(f)
with open('config.json') as f:
    config = json.load(f)

botKey = config['BOT_KEY']

# define the bot and the botname
bot = telepot.Bot(botKey)
botName = bot.getMe()['username']

# split commands in arrays ordered by priority
configSplitter = splitter.Splitter()
triggers = configSplitter.splitByPriority(triggers)

# define the handler
messageHandler.setBotname(botName)
messageHandler.setMessages(triggers)

# handle the messageLoop
print("setting up the bot...")
MessageLoop(bot, messageHandler.handle).run_as_thread()
print("Multibot is listening!")

# loop to catch all the messages
while 1:
    time.sleep(.3)

Версия Python: 3,6 32-битная

1 Ответ

0 голосов
/ 15 мая 2018

Решением было добавить sys.stdout.flush() после различных print() для восстановления функциональности print(), в то время как для того, чтобы код снова заработал, мне пришлось изменить функцию телепота

MessageLoop(bot, messageHandler.handle).run_as_thread()

, который не работал должным образом:

bot.message_loop(messageHandler.handle)
...