Python-变量更改时运行函数

时间:2019-03-07 12:07:08

标签: python loops callback

我有一个在永久循环中回显整数(从卷积数组包中取出)的服务。此循环将不断打印如下这样的不同状态:

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 个答案:

答案 0 :(得分: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()