您喜欢如何格式化控制台脚本的输出?我的意思是应用程序运行期间产生的输出(日志、标准输出)。
BG:我有一个 python 脚本,它获取数据、处理它、更新数据库中的一些相关数据并输出进度。我可以通过多种方式设置输出样式:
************ Starting programm X ************
Fetching 450 lands... Done
540 local lands found
syncronizing [-------- ] 10%
Done
输出大写还是全部小写?输出是否应用缩进?像破折号或散列这样的视觉糖分怎么样?像 wget 中的进度条?
我知道这是一种设计,但在网络中我们有一些基本规则,我们有可用性,但在控制台输出艺术中我们没有规则。 Jacob Nilsen 对控制台脚本的输出有何看法?
最佳答案
即使在控制台脚本中,可用性也非常重要。特别是对于任何长时间运行的进程,无论 UI 是图形界面还是终端,显示任务进度的一些指示都具有更好的可用性。我建议查看Nielsen's heuristics 许多原则直接适用于控制台输出。在讨论控制台输出时,特别需要注意以下三个启发:
- 系统状态的可见性:通过某种进度条在控制台中显示进度,以显示在合理时间内发生的情况。
- 一致性和标准:您在问题中提到了这一点。
- 美观和简约的设计:尝试并输出最少量的相关且有用的信息。
为了标准和一致性,请遵循现有流行命令的约定。两个值得一看的好东西是 wget和 pv 。它们都有看起来非常相似的进度条:
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 example of progress bars for a multi-threaded application
- Urwid是一个优秀的 Python 控制台用户界面库
- ProgressBar widget in Urwid
关于python - 控制台输出样式、格式化最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19193731/