我正在尋找一種方法在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
鏈接到深入討論on 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您的答案。提供美麗的代碼。看到你的回答後,我想起了一個問題。如果我想讓用戶「按任意鍵」怎麼辦?不只是「輸入」......這樣的事情可能嗎?我會開始這個問題作爲一個新的線程,但對這種情況沒有信心..是否有任何選擇/方式? –
感謝您使用此短代碼,它使用Enter鍵非常有效。 – user2669068
Windows的潛在解決方案:
exec -ignorestderr [file join $env(windir) system32 cmd.exe] /c pause
這也通知非ascii按鍵(如方向鍵,轉義等)。
另一種解決方案是(該鏈接的感謝!)above 提出 多納爾研究員的Raw Mode on Windows,這可以歸納爲 這兩行代碼:
twapi::modify_console_input_mode stdin -lineinput 0 -echoinput 0
read stdin 1
這不注意到逃生,箭頭鍵等等(你可能需要稍後恢復控制檯輸入模式)。
- 1. 暫停並等待按鈕被點擊,然後繼續
- 2. SwipeView Javascript暫停()和繼續()
- 3. 連續任務等待並暫停
- 4. 暫停jquery函數等待ajax內容加載之前繼續
- 5. RxJS - 等待繼續
- 6. 球拍暫停/繼續按鈕,遊戲
- 7. 觸發循環暫停並繼續按空格鍵
- 8. 如何暫停/繼續NSThread
- 9. WPF動畫暫停/繼續
- 10. Scrapyd暫停/繼續工作
- 11. 「按任意鍵或等待10秒鐘繼續」
- 12. 如何在繼續之前讓Tkinter等待按鍵?
- 13. AVCaptureSession暫停和繼續錄製
- 14. 文字動畫暫停和繼續
- 15. Java進程暫停和繼續
- 16. 等待/暫停C秒數
- 17. 睡眠/等待/暫停javascript
- 18. 暫停/殺死和等待線程
- 19. 等待關於流繼續
- 20. 等待的條件繼續
- 21. 等待叉孩子繼續
- 22. 等待異步塊繼續
- 23. 經過暫停,暫停或等待事件被解僱後,我怎麼知道它何時可以繼續
- 24. 按Enter鍵繼續
- 25. 等待Java按鍵
- 26. 使JFrame GUI等待,然後按下按鈕後繼續
- 27. ios下載視頻暫停/繼續
- 28. AFNetworking +暫停/繼續下載大文件
- 29. -SIGCONT不會繼續暫停過程?
- 30. 排球:暫停/繼續下載
您確定要將其構建到腳本中嗎?有人可能希望將輸出發送到一個文件或將其輸出到「grep」,「sed」或其他任何地方。更好的解決方案是將腳本輸出管道輸出到「more」程序之一(Windows上可用)或「less」。 – potrzebie