我有时会测试Python模块,因为我通过在终端中运行Python交互式提示,导入我的新模块并测试功能来开发它们。当然,由于我的代码正在开发中,因此存在错误,并且需要频繁重启解释器。当我在重新启动之前只执行了几个解释器行时,这并不是太痛苦:当解释器重启时看起来像Up Up Enter Up Up Enter
时我的键序列...但是将它推断为5个或更多要重复的语句并且它变得非常痛苦!
当然我可以把我的测试代码放到一个用python -i
执行的脚本中,但是这是一个划痕活动,它看起来并没有“高于阈值”打开文本编辑器:)我真的很害怕来自bash shell的Ctrl-r
行为:在bash中按顺序执行10个命令序列涉及在历史记录中查找命令(重复Up
或Ctrl-r
表示搜索 - 两者都在Python解释器shell中工作,然后只按Ctrl-o
十次。我最喜欢的bash shell功能之一。
问题在于,虽然许多其他readline绑定功能(如Ctrl-a
,Ctrl-e
,Ctrl-r
和Ctrl-s
在Python解释器中起作用,Ctrl-o
才不是。虽然或许 readline
模块可用于将此功能添加到python
提示符,但我无法在线找到任何引用。有什么建议吗?
编辑:是的,我知道使用交互式解释器并不是一种可以扩展到几行的开发方法!但它对于小型测试很方便,而且IMO的交互性可以帮助确定开发的API是自然,方便还是过重。因此,请将技术问题的答案局限于是否可以使用readline历史记录步骤在python中工作,而不是侧重于是否应该选择(有时)以这种方式工作!
编辑:自发布以来,我意识到我已经在使用readline
模块来使一些Python解释器历史记录功能起作用。但是,即使我将operate-and-get-next
放在readline.parse_and_bind("Control-o: operate-and-get-next")
文件中,似乎也不支持Ctrl-o与PYTHONSTARTUP
readline命令的绑定。
答案 0 :(得分:4)
我经常测试Python模块,因为我通过在终端中运行Python交互式提示,导入我的新模块并测试功能来开发它们。
停止使用此模式并开始在文件中编写测试代码,您的生活将变得更加轻松。
无论如何,运行该文件的麻烦都会少一些。
如果您自动进行检查而不是阅读结果,那么检查代码会更快,更不容易出错。
您可以在完成后保存该文件,并在更改代码或环境时运行该文件。
您可以对测试执行指标,例如确保您没有未测试的部分代码。
您熟悉unittest module吗?
答案 1 :(得分:1)
在对python-ideas列表进行一些讨论之后回答我自己的问题:尽管在一些readline文档中有相互矛盾的信息,但operate-and-get-next
函数实际上被定义为readline的bash扩展,而不是核心readline 。
因此,当在Python解释器会话中导入Ctrl-o
模块时,以及在尝试手动强制执行此绑定时,readline
在默认情况下既不像预期的那样行为:readline中不存在该函数图书馆要受约束。
Google搜索显示https://bugs.launchpad.net/ipython/+bug/382638,GNU readline维护者在其上提供不将此功能添加到核心readline的原因,并说它应该由调用应用程序实现。他还说“它的实现并不复杂”,尽管对于我来说,如何(或者甚至是否可能)将其作为readline
模块行为的纯Python扩展并不明显。
所以不,这是不可能的,除非来自bash的operate-and-get-next
函数在Python readline
模块或解释器本身中显式实现。
答案 2 :(得分:0)
这不是您问题的答案,但如果这是您的开发风格,您可能需要查看DreamPie。它是Python终端的GUI包装器,提供各种方便的快捷方式。其中之一是能够在解释器显示中进行拖动选择并仅复制代码(而不是输出)。然后,您可以粘贴此代码并再次运行它。对于您描述的工作流程类型,我觉得这很方便。
答案 3 :(得分:0)
您最好的选择是检查该项目:http://ipython.org
这是一个使用 Ctrl + R 进行历史搜索的示例:
修改强>
如果您正在运行debian
或派生:
sudo apt-get install ipython