我正在寻找一种方法在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. 等待按键继续功能?
- 3. SwipeView Javascript暂停()和继续()
- 4. 连续任务等待并暂停
- 5. 暂停jquery函数等待ajax内容加载之前继续
- 6. RxJS - 等待继续
- 7. 球拍暂停/继续按钮,游戏
- 8. 等待点击按钮才能继续
- 9. 触发循环暂停并继续按空格键
- 10. WPF动画暂停/继续
- 11. 如何暂停/继续NSThread
- 12. Scrapyd暂停/继续工作
- 13. Java进程暂停和继续
- 14. AVCaptureSession暂停和继续录制
- 15. 文字动画暂停和继续
- 16. “按任意键或等待10秒钟继续”
- 17. 如何在继续之前让Tkinter等待按键?
- 18. 睡眠/等待/暂停javascript
- 19. 等待/暂停C秒数
- 20. 暂停/杀死和等待线程
- 21. 等待叉孩子继续
- 22. 等待异步块继续
- 23. 等待关于流继续
- 24. 等待的条件继续
- 25. 经过暂停,暂停或等待事件被解雇后,我怎么知道它何时可以继续
- 26. 按Enter键继续
- 27. 等待Java按键
- 28. 使JFrame GUI等待,然后按下按钮后继续
- 29. AFNetworking +暂停/继续下载大文件
- 30. ios下载视频暂停/继续
您确定要将其构建到脚本中吗?有人可能希望将输出发送到一个文件或将其输出到“grep”,“sed”或其他任何地方。更好的解决方案是将脚本输出管道输出到“more”程序之一(Windows上可用)或“less”。 – potrzebie