tcl пауза и ожидание нажатия клавиши для продолжения
В tcl я ищу способ приостановить работу сценария (например, после некоторых выводов с помощью "Put") и дождаться нажатия клавиши от пользователя, прежде чем продолжить вывод оставшегося текста.
3 ответа
С благодарностью за ответ 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
Вы просто используете 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
Потенциальное решение для Windows:
exec -ignorestderr [file join $env(windir) system32 cmd.exe] /c pause
Это также замечает нажатия клавиш, отличные от ascii (такие как клавиши со стрелками, Escape и т. Д.).
Другим решением является режим Raw в Windows, предложенный Donal Fellows выше (спасибо за ссылку!), Который может быть сведен в эти две строки кода:
twapi::modify_console_input_mode stdin -lineinput 0 -echoinput 0
read stdin 1
Это не замечает Escape, клавиши со стрелками и тому подобное (и вам может понадобиться восстановить режим ввода с консоли позже).