我有一个服务,它在永久循环中回显一个整数(在一个复杂的数组包中)。这个循环会不断打印不同的状态,如下所示:
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()
您需要跟踪以前的值,以便将其与当前值进行比较,如果它们不同则打印出来。像这样的东西:
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()