paho mqtt: неправильный вывод при компиляции с python 3 - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу установить соединение mqtt. И я хочу сделать это в Python3.

Это часть кода клиента:

def on_message(client, userdata, message):
    print("Received message '" + str(message.payload) + "' on topic '"
          + message.topic + "' with QoS " + str(message.qos))

    if message.payload == "Hello":
        print("Received message #1. Do something.")
        # do something

    if message.payload == "World":
        print("Received message #2. Do something else.")
        # do something

Я в основном публикую оба сообщения "Мир" и "Привет" по заданным темам для этого клиента, но я получаю разные результаты в зависимости от используемой версии Python.

Это вывод, когда я компилирую с python2: (Это вывод, который я хочу)

pi@raspberrypi:~/Desktop $ python Client.py
Connection returned result: 0
Received message 'Hello' on topic 'Wulff/test' with QoS 0
Received message #1. Do something.
Received message 'World' on topic 'Wulff/topic' with QoS 0
Received message #2. Do something else.

Это вывод, когда я компилирую с python3:

pi@raspberrypi:~/Desktop $ python3 Client.py
Connection returned result: 0
Received message 'b'Hello'' on topic 'Wulff/test' with QoS 0
Received message 'b'World'' on topic 'Wulff/topic' with QoS 0
Received message 'b'Hello'' on topic 'Wulff/test' with QoS 0
Received message 'b'World'' on topic 'Wulff/topic' with QoS 0`

Я не понимаю, почему программа здесь не распознает полезную нагрузку сообщения.

На что следует обратить внимание при запуске программы с разными версиями python? Я уже установил необходимые модули на Python2 и Python3.

1 Ответ

0 голосов
/ 10 ноября 2018

Это связано с тем, что в Python 3 полезная нагрузка сообщения теперь считается байтовым массивом (именно так оно и должно быть всегда)

Это может быть преобразовано в строку со следующим:

def on_message(client, userdata, message):
    payload = message.payload.decode()
    print("Received message '" + payload + "' on topic '"
          + message.topic + "' with QoS " + str(message.qos))

    if payload == "Hello":
        print("Received message #1. Do something.")
        # do something

    if payload == "World":
        print("Received message #2. Do something else.")
        # do something
...