我正在寻找一种在 tcl 中暂停脚本的方法(例如在一些带有“puts”的输出之后)并等待用户按下一个键,然后再继续输出剩余的文本。
问问题
16005 次
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 回答