我正在寻找Linux中的某种软件包/ API,它们可以在类似于top
的列中显示输出。
例如,保持清洁并以给定的间隔将输出重写为全屏(我猜watch可能这样做足够好。但我希望有一些API可以包装在它之上)。
轻松按列排序。特别是如果我按列A排序,那么当下次重新打印所有内容时,它会记住每次刷新输出时按列A排序。
当然,理想情况下它也可以为我处理键盘输入。
总而言之,我正在寻找可以帮助我以“top
”组织它的方式组织输出的包或API。
为了清楚起见:我显示的内容可能与系统统计信息完全无关。我喜欢top组织内容的方式。例如,我的输出内容可能是(并且它不断变化,这就是需要清理和重写的原因):
时间Col1 Col2
12 4 13
13 5 19
14 5 15
我可以按一个键说“A”然后按时间排序。如果我按下了一个键B,那么它会被Col1排序。如果我按下一个键说C然后它按Col2等排序等。
当然,这个输出内容可以完全在内存中,以任何数据结构组织。
答案 0 :(得分:2)
如果你想在shell中执行此操作,那么watch + printf将是一个快速而肮脏的起点 - 请注意每隔几秒重新运行一个脚本,printf进行格式化,大致如下:
printf '%-20s %-20s\n' \
header1 header2 \
line1data1 line1data2 \
line2data1 line2data2 ...
......数据可能是在数组中构建并从数组中提供的。只需在脚本中循环并发出适当的控制代码以清除每一行,因为您要覆盖它(并在开头移动到窗口的顶部)是另一种合理的方法。
也就是说,这里正确的工具将是一个建立在curses之上的层。已经有许多更高级别的文本小部件集 - 但我不知道有任何直接支持表的内容。
如果你愿意写C,那么围绕curses的一个这样的包装是GAP.Browse。
答案 1 :(得分:2)
我发现Python中的curses库可以满足这种要求。它仍然不支持列管理,但它提供了一个体面的解决方案,一个理智的语言,一个很好的文档和一个可管理的学习曲线。
如果其他人有更好的建议,我很乐意选择他作为最佳答案。
答案 2 :(得分:0)