まだ製作途中ですが、コードは以下のリポジトリにあるので、興味があれば見てみてください。
https://github.com/nakano16180/ros_control
きっかけ
ROSでメッセージを確認したいとき、rostopic echo
を使っていました。
しかし、複数メッセージを確認したいときにrostopic list
をしてからrostopic echo
をすると、echoで確認したメッセージで端末が埋まってしまい、その前のrostopic list
の結果が流れてしまう
なんとかできないかと調べていると、こんな記事を見つけました。
コンソールへの出力を上書きしてゆく方法
これだ!でもこれ、1行しかだめじゃん(泣)
複数行上書き出来る方法はないかと思い、もう少し調べているとCursesというライブラリを見つけました。
Cursesとは
Pythonの標準ライブラリで、組み込み関数のinputやprintを使うより高度なCUIアプリケーションを作成できます。
とりあえずコードを見てみる
# !/usr/bin/env python3
import curses
import time
if __name__ == "__main__":
try:
stdscr = curses.initscr()
curses.noecho()
for t in range(0, 10):
stdscr.clear()
stdscr.addstr(0, 0, 'Program will be terminated after %s seconds' % (10 - t))
stdscr.refresh()
time.sleep(1)
except:
# Exception by Ctrl + C
pass
finally:
curses.echo()
curses.endwin()
コードはここから→Python:cursesライブラリの使い方
コード中のstdscr.addstr(y, x, string)という形で、指定した座標に文字を表示させることができます。
stdscr.addstr()のx,yを変更しながら追加していけば表示させる内容も増えるので、割りと使いやすいのではないかと思いました。
おわりに
今回紹介したCursesを調べている途中で、TUI(Text User Interface)というものを知りました。ちょっとしたコマンドや小さなツールでもUIなどにこだわってみると開発も楽しくなるのではないかと思いました。
今後の目標として、topicのリストとtopic内容の表示を同時にできたらいいなと思います。