Python - 变量更改时运行函数

问题描述 投票:0回答:1

我有一个服务,它在永久循环中回显一个整数(在一个复杂的数组包中)。这个循环会不断打印不同的状态,如下所示:

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()
python loops callback
1个回答
1
投票

您需要跟踪以前的值,以便将其与当前值进行比较,如果它们不同则打印出来。像这样的东西:

 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()
© www.soinside.com 2019 - 2024. All rights reserved.