Python - запуск функции при изменении переменной - PullRequest
0 голосов
/ 07 марта 2019

У меня есть служба, которая отображает целое число (из сложного пакета массива) в постоянном цикле.Этот цикл будет постоянно печатать различные состояния, такие как:

1 (new assignment)
1
1
1
3 (success)
3
3
1 (new assignment)
1
1
1
1
4 (failure)
4
4
1 (new assignment)
1
1
3 (success)

В python я хочу напечатать сообщение один раз , когда изменяется целое число (например, в скобках), ядо сих пор не удалось найти подходящее решение.Основная проблема заключается в том, что функция обратного вызова (которая печатает эти целые числа для меня) вызывается каждую секунду или около того, что приводит к тому, что сообщения об обновлении печатаются при каждом выполнении одного из условий.

Кодследующим образом, класс rospy создает цикл, который будет продолжать вызывать обратный вызов:

def callback(data):
    status = data.status_list[0].status
    if status == 1:
        print("new assignment")
    if status == 3:
        print("success")
    if status == 4:
        print("failure")

rospy.init_node('listener', anonymous=True)
rospy.Subscriber("move_base/status", GoalStatusArray, callback)
rospy.spin()

1 Ответ

1 голос
/ 07 марта 2019

Вам необходимо отслеживать предыдущее значение, чтобы вы могли сравнить его с текущим и распечатать, если они отличаются.Как то так:

 class StatusChecker(object):
    def __init__(self):
        self.previous = None

    def callback(self, data):
        status = data.status_list[0].status
        if status != self.previous:
            if status == 1:
                print("new assignment")
            elif status == 3:
                print("success")
            elif status == 4:
                print("failure")
            # Remember this value so we can see if it changes
            self.previous = status

   checker = StatusChecker()
   rospy.init_node('listener', anonymous=True)
   rospy.Subscriber("move_base/status", GoalStatusArray, checker.callback)
   rospy.spin()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...