python - 控制台输出样式、格式化最佳实践

标签 python console output usability

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

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

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

输出大写还是全部小写?输出是否应用缩进?像破折号或散列这样的视觉糖分怎么样?像 wget 中的进度条?

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

最佳答案

即使在控制台脚本中,可用性也非常重要。特别是对于任何长时间运行的进程,无论 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 秒的更新间隔。

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

一些相关/有用的链接:

关于python - 控制台输出样式、格式化最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19193731/

相关文章:

python - 带有 Django 的 Dropbox API - 身份验证

ruby-on-rails - Hirb 不起作用

java - System.out.println 的最佳替代方案是什么?

java - 能否在 JNLP 应用程序中以编程方式启用 "Java console"窗口

c++ - 列表中的最大数字

linux - crontab 在调用包含输出的 .sh 时不输出任何内容

Python 的 Min() 用于自定义类(二叉搜索树)

python - 如何使用 t.c.telnet 构建端点

python - 使用屏幕缓冲区创建一个程序到 'edit' 控制台中显示的文本

java - 如何为控制台输出添加间距