Я ищу способ в tcl для приостановки сценария (например, после некоторых выходов с «puts») и дождаться нажатия клавиши от пользователя, прежде чем продолжить вывод оставшийся текст.tcl приостановка и ожидание нажатия клавиши для продолжения
ответ
С благодарностью ответить Хай Ву, если вы на 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: Reading a single character from the keyboard using Tcl
Выполнение того же самого в Windows требует использования пакета TWAPI, чтобы вы могли изменить режим терминала. Это [немного длинный комментарий] (http://wiki.tcl.tk/14693). –
Вы просто использовать 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
+1 для вашего ответа. Красивый код. Увидев ваш ответ, на мой вопрос пришел 1 вопрос. Что, если я хочу, чтобы пользователь «нажал любую клавишу»? а не просто «Ввод» ... Возможно ли такое? Я бы начал этот вопрос как новый поток, но не был уверен в таком сценарии. Есть ли какой-нибудь вариант/способ? –
Благодарим вас за этот короткий код, он отлично работает с клавишей ввода. – user2669068
Потенциальное решение для Windows:
exec -ignorestderr [file join $env(windir) system32 cmd.exe] /c pause
Это также относится к клавишам не-ascii (например, клавишам со стрелками, Escape и т. Д.).
Другим решением является Raw Mode on Windows предложенного Донала Fellows above (спасибо за ссылку!), Которые могут быть сведены в этих двух строки коды:
twapi::modify_console_input_mode stdin -lineinput 0 -echoinput 0
read stdin 1
Это не замечает побег, стрелки ключи и т. п. (и вам может понадобиться восстановить режим ввода консоли позже).
Вы уверены, что хотите создать это в скрипте? Кто-то может захотеть отправить вывод в файл или передать его в 'grep',' sed' или что-то еще. Лучшее решение заключается в том, чтобы вывести сценарии в одну из программ «больше» (доступно также в Windows) или «меньше». – potrzebie