我正在寻找一种在 tcl 中暂停脚本的方法(例如,在一些带有"puts"的输出之后(并等待用户按下的键,然后再继续输出剩余的文本。
你只需使用gets
从stdin读取:
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
感谢
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维基上的彻底讨论:使用Tcl从键盘读取单个字符
Windows 的潜在解决方案:
exec -ignorestderr [file join $env(windir) system32 cmd.exe] /c pause
这也注意到非 ASCII 按键(例如箭头键、Esc 等(。
另一个解决方案是Windows上的原始模式以上多纳尔研究员 (感谢您的链接!(,可以总结为这两行代码:
twapi::modify_console_input_mode stdin -lineinput 0 -echoinput 0
read stdin 1
这不会注意到 Esque、箭头键等(稍后可能需要恢复控制台输入模式(。