问题描述
我正在尝试运行“Programming Robots with ROS”一书中的以下示例脚本
#!/usr/bin/env python
import rospy
import sys,select,tty,termios
from std_msgs.msg import String
if __name__=='__main__':
key_pub = rospy.Publisher('keys',String,queue_size=1)
rospy.init_node("keyboard_driver")
rate= rospy.Rate(100)
old_attr = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())
print "Publishing keystrokes. Press Ctrl-C to exit..."
while not rospy.is_shutdown():
if select.select([sys.stdin],[],0)[0] == [sys.stdin]:
key= sys.stdin.read(1)
print(key)
key_pub.publish(key)
#key_pub.publish(sys.stdin.read(1))
rate.sleep()
termios.tcsetattr(sys.stdin,termios.TCSADRAIN,old_attr)
我发现以下问题:
- select 不执行预期的操作。运行此脚本后,它永远不会进入 if 部分(因此永远不会执行
print(key)
)。 - 当我按 Ctrl-C 时,程序会完成,但似乎
termios.tcsetattr(sys.stdin,old_attr)
从未执行过,因为终端变得不可用。 (击键捕获未恢复默认)
这里出了什么问题?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)