我有时测试Python模块,因为我在终端上运行的Python交互提示符下,输入我的新模块,并测试了功能开发它们。 当然,由于我的代码是在发展中存在的bug,并且需要解释的频繁重启。 这是不是太痛苦,当我重新启动之前我只执行了几个解释行:我的按键顺序翻译时重启看起来像Up Up Enter Up Up Enter
...但它外推到5周或更多的语句被重复和它会严重地痛苦!
当然,我可以把我的测试代码到我与执行脚本python -i
,但就是这样一个从无到有的活动,它似乎相当“高于阈值”不打开一个文本编辑器:)什么我真的很憔悴为是Ctrl-r
从bash外壳行为:在bash在序列10个执行的命令序列包括寻找在历史上的命令(重复Up
或Ctrl-r
用于搜索-在Python解释壳都工作),然后只需按下Ctrl-o
十倍。 我最喜欢的bash shell的功能。
问题是,虽然很多其他的readline结合功能,例如Ctrl-a
Ctrl-e
Ctrl-r
并且Ctrl-s
在Python解释工作, Ctrl-o
没有。 我已经无法找到这个网上的任何引用,但也许是readline
模块可用于添加此功能的python
提示。 有什么建议么?
编辑:是的,我知道,使用交互式解释是不是开发方法规模超过几行! 但在方便的小测试,IMO的互动性可以帮助制定出开发API是否是自然和方便,或过重。 所以,请限制答案的的ReadLine历史步进是否可以进行的技术问题在Python的工作,而不是一个是否应该或不应该选择(有时)以这种方式工作侧的意见!
编辑:既然张贴我意识到,我已经使用readline
模块使一些Python解释器历史记录功能的工作。 但是,按Ctrl-O结合的operate-and-get-next
的ReadLine命令似乎并没有被支持,即使我把readline.parse_and_bind("Control-o: operate-and-get-next")
在我PYTHONSTARTUP
文件。
我常考Python模块,因为我在终端上运行的Python交互提示符下,输入我的新模块,并测试了功能开发它们。
停止使用这种模式,并开始在文件中写入测试代码和你的生活会容易得多。
不管是什么,运行文件就会少一些麻烦。
如果你做检查,自动而不是读的结果,这将是更快,更不容易出错,检查你的代码。
您可以保存文件,当你完成并运行它,只要你改变你的代码或环境。
您可以在测试中表现指标,例如确保你没有你的代码的部分你没有测试。
你熟悉的单元测试模块 ?
回答我的问题后,蟒蛇思路名单上的一些讨论:尽管一些readline的文档中矛盾的信息看来, operate-and-get-next
函数的定义是:一个bash扩展的ReadLine,而不是核心readline的事实。
所以这就是为什么Ctrl-o
既表现为在导入时希望在默认情况下readline
在Python解释器会话模块,也没有试图手动强制此绑定时:该功能不会readline库存在的约束。
谷歌搜索显示https://bugs.launchpad.net/ipython/+bug/382638 ,对其中的GNU的readline维护者给出了不添加此功能核心readline的原因,并说,它应该通过调用应用程序来实现。 他还表示,“它的实现并不复杂”,虽然这不是明显对我如何(或者是否它甚至有可能)要做到这一点作为一个纯粹的Python扩展到readline
模块行为。
所以,不,这是不可能的那一刻,除非operate-and-get-next
从bash函数了Python中明确实现readline
模块或解释器本身。
这是不完全的回答你的问题,但如果这是你的开发风格,你可能想看看DreamPie 。 它是一个为Python终端提供各种方便快捷方式的GUI包装。 其中之一是,以拖动选择的能力跨越解释显示和仅复制码(未输出)。 然后,您可以粘贴在此代码,并再次运行它。 我觉得这是得心应手,为您介绍工作流程的类型。
你最好的选择将是检查项目: http://ipython.org
这是与按Ctrl + R历史搜索的例子:
编辑如果你正在运行debian
或衍生化:
sudo apt-get install ipython
文章来源: Key binding to interactively execute commands from Python interpreter history in order?