iga*_*rav 0 python sockets python-2.7 slack-api
我有以下脚本来监视松弛通道.我的脚本运行好几个星期,但有一段时间我得到一个异常被捕获的打印为
socket is already closed.我无法找到此错误的资源,但它永远不会重新连接.一旦出现,我会一直收到这个错误.
我想了解它为什么会发生以及它的解决方案是什么?
import os
import time
from slackclient import SlackClient
# constants
BOT_ID = os.environ["LOUD_BOT_ID"]
LOUD_BOT_TOKEN = os.environ["LOUD_BOT_TOKEN"]
AT_BOT = "<@" + BOT_ID + ">"
slack_client = SlackClient(os.environ["LOUD_BOT_TOKEN"])
def parse_slack_output(rtm_read_output):
output_list = rtm_read_output
if output_list and len(output_list) > 0:
for output in output_list:
if output and "text" in output and AT_BOT in output["text"]:
return (
output["text"].split(AT_BOT)[1].strip(),
output["channel"],
output["user"]
)
return None, None, None
if __name__ == "__main__":
READ_WEBSOCKET_DELAY = 1
if slack_client.rtm_connect():
print "Bot is up and running..."
while True:
try:
message, channel, sender_user_id = parse_slack_output(
slack_client.rtm_read()
)
print message, channel, sender_user_id
time.sleep(READ_WEBSOCKET_DELAY)
except Exception as e:
print e
time.sleep(READ_WEBSOCKET_DELAY)
else:
print "Couldn't connect bot, please check bot's token and ID"
Run Code Online (Sandbox Code Playgroud)
谢谢
小智 5
您必须以try-catch-reconnect方式执行此操作:
if __name__ == "__main__":
reload(sys)
sys.setdefaultencoding('utf-8')
READ_WEBSOCKET_DELAY = 1
if slack_client.rtm_connect():
print("jfbot connected and running!")
while True:
try:
command, channel = parse_slack_output(slack_client.rtm_read())
if command and channel:
handle_command(command, channel)
time.sleep(READ_WEBSOCKET_DELAY)
except WebSocketConnectionClosedException as e:
print e
print 'Caught websocket disconnect, reconnecting...'
time.sleep(READ_WEBSOCKET_DELAY)
slack_client.rtm_connect()
except Exception, e:
print e
time.sleep(READ_WEBSOCKET_DELAY)
else:
print("Connection failed. Invalid Slack token or bot ID?")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1968 次 |
| 最近记录: |