gpt4 book ai didi

shell - 在我的 tcl 脚本运行时在屏幕上打印完成的百分比?

转载 作者:行者123 更新时间:2023-12-04 05:19:19 24 4
gpt4 key购买 nike

我有一个需要几分钟才能运行的 tcl 脚本(执行时间因配置不同而异)。

我希望用户对它是否仍在执行以及脚本执行时完成需要多长时间有所了解。

到目前为止我的一些想法:

1)使用 ... 表示它随着每个内部命令运行左右而不断增加。但同样,它并没有真正让第一次使用的用户知道还有多少。

2)使用我在很多地方看到的旋转斜线。

3) 在屏幕上显示实际完成百分比输出。不知道这是否可行或如何去做。

有没有人对可以做什么有任何想法,以便脚本的用户了解正在发生的事情以及如何做到这一点?

此外,如果我使用 ... 来实现它,我如何让他们打印 .每次都在同一行。如果我在 tcl 脚本中使用 puts 来执行此操作,则 .只是打印在下一行。

对于旋转斜线,我需要替换已经打印在屏幕上的东西。我怎么能用 tcl 做到这一点?

最佳答案

首先,您在打印点时遇到问题的原因是 Tcl 正在缓冲其输出,等待新行。这通常是一种有用的行为(通常足以使其成为默认行为)但在这种情况下不需要它,因此您可以使用以下命令将其关闭:

fconfigure stdout -buffering none

(其他缓冲选项是 linefull ,它们提供逐渐更高级别的缓冲以提高性能但降低响应速度。)
或者,执行 flush stdout打印一个点后。 (或者将点打印到 stderr ,默认情况下没有缓冲,因为主要用于错误消息。)

做一个微调器并不比打印点难多少。关键技巧是使用回车(一个不可打印的字符,有时可视为 ^M )将光标位置移回行首。将微调器代码分解为一个小过程很好:
proc spinner {} {
global spinnerIdx
if {[incr spinnerIdx] > 3} {
set spinnerIdx 0
}
set spinnerChars {/ - \\ |}
puts -nonewline "\r[lindex $spinnerChars $spinnerIdx]"
flush stdout
}

那么您只需调用 spinner经常。简单的! (另外,完成后在微调器上打印一些东西;只需执行 puts "\r$theOrdinaryMessage" 。)

一直到一个实际的进度表是很好的,它建立在这些技术的基础上,但它需要你计算出有多少处理要做等等。微调器更容易实现! (特别是如果你还没有确定有多少工作要做。)

关于shell - 在我的 tcl 脚本运行时在屏幕上打印完成的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13835717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com