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

あなたがUnixのようなシステムを使用している場合、Hai Vuの答えに感謝します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

于 2013-09-25T11:17:06.240 に答える
0

Windows の潜在的な解決策:

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

これにより、ASCII 以外のキー押下 (矢印キー、エスケープなど) も検出されます。

もう 1 つの解決策は、上記のDonal Fellows によって提案された Windows の Raw モード (リンクをありがとう!) です。これは、次の 2 行のコードに要約できます。

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

これは Escape や矢印キーなどを認識しません (後でコンソール入力モードを復元する必要があるかもしれません)。

于 2016-05-13T12:54:02.740 に答える