专业WinUtil深度解析:如何高效优化Windows系统的一站式解决方案
2026/5/6 12:26:27
在 Expect 中,有时需要生成随机数,例如在玩像 robohunt 这样的游戏脚本时。不过,Expect 没有内置的随机数生成命令。这背后有其哲学考量,一是已有众多随机数生成的解决方案,二是没有一种随机数生成器(RNG)能满足所有人的需求。不同的 RNG 会在不同目标间进行权衡,因此选择哪种随机数生成器取决于具体的使用场景,这也是 UNIX 系统上有众多 RNG 的原因之一。
如果已有独立的 RNG 程序,可以使用open或spawn来运行它。若 RNG 是非交互式的且能生成随机数流,可使用open打开并通过gets读取新的随机数;若 RNG 是交互式的,则按需发送命令并使用expect获取结果。
若所需的 RNG 是用 C 子例程编写的,可以编写一个命令来调用它,然后将其链接到 Expect 中。
对于对随机数质量要求不高,只是希望程序每次运行方式不同的情况,可以使用以下 Tcl 过程:
proc random_init {seed} { global _ran set _ran $seed } proc random {} { global _ran set period 259200 set _ran [expr ($_ran*7141 + 54773) % $period] expr $_ra