5

我正在寻找一种在 tcl 中暂停脚本的方法(例如在一些带有“puts”的输出之后)并等待用户按下一个键,然后再继续输出剩余的文本。

4

3 回答 3

15

你只是gets用来从标准输入读取:

proc pause {{message "Hit Enter to continue ==> "}} {
    puts -nonewline $message
    flush stdout
    gets stdin
}

pause "Hurry, hit enter: "; # Sample usage 1
pause;                      # Sample usage 2, use default message
于 2013-09-25T01:07:28.163 回答
5

感谢Hai Vu的回答,如果你在一个类似unix的系统上stty

proc anykey {{msg "Hit any key: "}} {
    set stty_settings [exec stty -g]
    exec stty raw -echo
    puts -nonewline $msg
    flush stdout
    read stdin 1
    exec stty $stty_settings
    puts ""
}
puts 1
anykey
puts 2

链接到 Tcl wiki 上的全面讨论:使用 Tcl 从键盘读取单个字符

于 2013-09-25T11:17:06.240 回答
0

Windows 的潜在解决方案:

exec -ignorestderr [file join $env(windir) system32 cmd.exe] /c pause

这也会注意到非 ascii 按键(例如箭头键、Escape 等)。

另一个解决方案是上面Donal Fellows提出的Windows上的Raw Mode (感谢链接!),可以总结为这两行代码:

twapi::modify_console_input_mode stdin -lineinput 0 -echoinput 0
read stdin 1

这并没有注意到 Escape、箭头键等(您可能需要稍后恢复控制台输入模式)。

于 2016-05-13T12:54:02.740 回答