回答
这当然是可能的。历史可以在某种程度上独立于输入来处理,因此理想情况下,您可以使用诸如addLine
和previousLine
等方法来表示历史记录的对象。然后你可以将它粘贴到你选择的用户界面上,无论是Gtk应用程序中的输入框还是stdio上的某个输入框。
作为(未完)IRC客户端的一部分,我已经写了这样的事情:https://github.com/exarkun/invective/blob/master/invective/history.py
而实际上,在同一项目中,你会发现LineInputWidget鱼钩这件事到标准输入输出,并且还器具诸如emacs风格的杀戮和猛击,正向和反向字等。
stdiodemo.py无法处理像向上箭头和向下箭头这样的事情,尽管如此,您可能需要进行明智的历史导航。相反,您需要使用一些知道如何解释终端控制序列的代码,在原始模式下处理stdio。如果你曾经运行过“cat”并点击箭头或任何其他功能键,那么你知道每个字节都有一个特殊的字节序列。程序中的某些东西需要解释这些序列并将它们转化为合理的东西。这是twisted.conch.insults.insults.ServerProtocol
所做的。它将连接到终端的字节传输转变为另一种更丰富的传输方式:一种可以告诉你字节何时到达的传输方式,以及当按下各种特殊键时。您可以通过运行查看正在运行的输入历史基于行的协议的一个例子:
python -m twisted.conch.stdio
此使用ServerProtocol
和扭曲自己的输入历史课的一个(关于这个REPL的特别之处是运行一个Python REPL它具有与处理输入同时运行的reactor,这在正常的Python REPL中是一项挑战)。
你可以在twisted/conch/stdio.py中找到它的来源。重要的stdio连接代码位于runWithProtocol
类中。看看它是如何实例化一个ServerProtocol
并将其连接到stdio与StandardIO
(所以它只是建立更多的stdiodemo.py的顶部)。尽管如此,ServerProtocol
只解释来自终端的字节。它没有你的应用程序逻辑。所以你需要给它一个实现你的应用程序逻辑的类。那是exactly what invective does。
- 1. Rpy2命令历史
- 2. Rstudio命令历史
- 3. 历史命令没有命令编号
- 4. Windows命令行历史
- 5. 米拉的命令历史?
- 6. 清除命令历史
- 7. Shell历史命令 - 功能
- 8. 从SSH命令行历史记录删除特定历史
- 9. tmux:列出命令提示历史?
- 10. 非交互式Python命令历史
- 11. redhat linux中的历史命令
- 12. 蜂巢命令行CLI的历史
- 13. 避免matlab命令历史时间戳
- 14. Firebug命令行历史记录
- 15. MongoDB shell不维护命令历史
- 16. 单更容易命令在bash历史
- 17. OS X终端历史丢失命令
- 18. 保存命令输出到bash历史
- 19. 检索命令行历史记录
- 20. 搜索终端中的命令历史
- 21. proc_open for php的命令历史记录
- 22. 通过命令过滤ZSH历史
- 23. 备份mac osx终端命令历史
- 24. Python中的历史命令行
- 25. 历史SQL Server上的命令
- 26. 当前bash命令不保存历史
- 27. Shell历史中的可疑命令
- 28. 其中是:命令历史存储?
- 29. 命令历史的Cygwin快捷方式
- 30. 非交互式shell命令的历史
你问'readline'吗? http://docs.python.org/library/readline.html – 2010-07-14 14:05:24
不,这个'twisted'标签意味着他在询问Twisted异步标准io演示。 http://twistedmatrix.com/trac/browser/trunk/doc/core/examples/stdiodemo.py – Glyph 2010-07-16 03:09:18
感谢雕文的澄清! – Antonis 2010-07-16 09:44:07