【问题标题】:Console output style, formatting best practise控制台输出样式,格式化最佳实践
【发布时间】:2013-10-05 03:47:51
【问题描述】:

您更喜欢如何格式化控制台脚本的输出?我的意思是应用程序运行期间产生的输出(日志、标准输出)。

BG:我有一个 python 脚本,它获取数据,处理它,更新我数据库中的一些相关数据并输出进度。我可以通过多种方式设置输出样式:

************ Starting programm X ************
Fetching 450 lands... Done
540 local lands found
syncronizing [--------                ] 10%
Done

大写输出还是全部小写?缩进是否应用于输出?像破折号或哈希这样的视觉糖呢? wget 中的进度条?

我知道这是一种设计,但在 Web 中我们有一些基本规则,我们有可用性,而在控制台输出艺术中我们没有规则。 Jacob Nilsen 对控制台脚本的输出有何看法?

【问题讨论】:

  • 应用程序应该大声失败并悄悄成功。最好的输出是没有输出。
  • @WilliamPursell 真棒的话!完全同意。
  • 进度条很好,但其余的在日志中可能会更好(详细可选)。计划您的输出可解析和可管道化。
  • 如果这些事情进展缓慢,或者很难判断什么时候取得进展,什么时候停滞不前,那么获得所有这些反馈会很有用。 (例如,请参阅 ffmpeg 示例......虽然它绝对是非常过度的,一些它转储到 stderr,你不想没有。)

标签: python console output usability


【解决方案1】:

即使在控制台脚本中,可用性也非常重要。特别是对于任何长时间运行的进程,无论 UI 是图形的还是在终端中,显示任务进度的一些指示都会更好地使用。我建议查看Nielsen's heuristics 许多原则直接适用于控制台输出。在谈论可能有用的控制台输出时,特别是有三种启发式方法:

  1. 系统状态的可见性:通过某种进度条在控制台中显示进度,以显示在合理时间内发生的情况。
  2. 一致性和标准:您在问题破折号或散列中提到了这一点。
  3. 美学和极简设计:尝试并输出最少量的相关和有用的信息。

为了标准和一致性,请遵循现有流行命令的约定。 wgetpv 是两个值得一试的好方法。它们都有非常相似的进度条:

wget

44% [================>                      ] 441,017,992  111MB/s  eta 6s

pv

 138MB 0:00:01 [ 107MB/s] [=========================================>] 100%  

它们通常看起来相同。它们还坚持最小设计,在一行中以文本和条形形式指示完成百分比、速度、完成的字节数和 eta 或经过的时间。

在合理的时间更新方面。我倾向于每 0.1 秒更新一次控制台中的状态。要使界面感觉响应,您希望它在该范围内。 wget 似乎每 0.2 秒更新一次。但是watch 命令的默认值是 2s,感觉太慢了。我通常最终以watch -n 0.1 command 运行该命令,以获得 0.1 秒的更新间隔。

其中一位 cmets 指出您的输出应该是可解析和可管道的。如果可能的话,这是一件非常好的事情。我特别喜欢 wget 处理这个问题的方式。如果您在终端中运行 wget,它会使用条形进度指示器,但如果您通过管道传输到文件或其他程序,它会使用点进度指示器。它会自动检测您是否有 tty 或正在通过管道传输命令并选择最合适的格式。您可以在 --progress 参数文档下的手册页上阅读有关此内容的信息。本质上,它有一个更易于人类阅读的输出和另一个更机器可读且日志友好的输出。

一些相关/有用的链接:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多