Python而True是阻止以前的代码执行

时间:2018-05-14 12:38:18

标签: python-3.x telegram thread-sleep telepot

我正在使用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 :(得分:0)

解决方案是在各种sys.stdout.flush()之后添加print()以恢复print()的功能,而为了使代码再次工作,我必须更改电信功能

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

没有正常工作:

bot.message_loop(messageHandler.handle)