脚本全屏,curses风格,更新unixen上的表格输出(la top)

时间:2012-04-20 18:28:49

标签: python linux bash shell

我正在寻找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等排序等。

当然,这个输出内容可以完全在内存中,以任何数据结构组织。

3 个答案:

答案 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库可以满足这种要求。它仍然不支持列管理,但它提供了一个体面的解决方案,一个理智的语言,一个很好的文档和一个可管理的学习曲线。

如果其他人有更好的建议,我很乐意选择他作为最佳答案。

http://docs.python.org/howto/curses.html

答案 2 :(得分:0)

CDK。我试过了,没关系,感觉有点像GTK。但printf解决方案更清晰。

如果您不介意脚本语言,可以尝试rbcurse,它具有更多功能。它有非常糟糕的文档。