2

我试图为我在 Python 中经常键入的命令节省一些击键次数。

在我的python 启动脚本中,我定义了一个名为 load 的函数,它类似于 import,但增加了一些功能。它需要一个字符串:

def load(s):
  # Do some stuff
  return something

为了调用这个函数,我必须输入

>>> load('something')

我宁愿能够简单地输入:

>>> load something

我正在运行带有readline支持的 Python,所以我知道那里存在一些可编程性,但我不知道这种事情是否可以使用它。

我试图通过InteractivConsole在我的启动文件中使用并创建它的一个实例来解决这个问题,如下所示:

import code, re, traceback

class LoadingInteractiveConsole(code.InteractiveConsole):
  def raw_input(self, prompt = ""):
    s = raw_input(prompt)
    match = re.match('^load\s+(.+)', s)
    if match:
      module = match.group(1)
      try:
        load(module)
        print "Loaded " + module
      except ImportError:
        traceback.print_exc()
      return ''
    else:
      return s

console = LoadingInteractiveConsole()
console.interact("")

这适用于我必须按两次 Ctrl-D 才能退出 python 解释器的警告:一次退出我的自定义控制台,一次退出真正的控制台。

有没有办法在不编写自定义 C 程序并将解释器嵌入其中的情况下做到这一点?

编辑

在频道之外,我建议将其附加到我的启动文件的末尾:

import sys
sys.exit()

它工作得很好,但我仍然对替代解决方案感兴趣。

4

3 回答 3

7

您可以尝试ipython - 它提供了一个 python shell,它允许许多事情,包括自动括号,它可以根据您的要求为您提供函数调用。

于 2010-10-25T17:41:27.577 回答
0

我想你想要 cmd 模块。

在此处查看教程: http ://wiki.python.org/moin/CmdModule

于 2010-10-25T17:29:19.560 回答
0

讨厌回答我自己的问题,但没有一个适用于我使用的所有 Python 版本的答案。除了我在问题编辑中发布的解决方案(这是我现在正在使用的)之外,还有另一个:

编辑.bashrc以包含以下行:

alias python3='python3 ~/py/shellreplace.py'
alias python='python ~/py/shellreplace.py'
alias python27='python27 ~/py/shellreplace.py'

然后简单地将所有LoadingInteractiveConsole代码移动到文件中~/py/shellreplace.py 一旦脚本完成执行,python 将停止执行,改进的交互式会话将是无缝的。

于 2010-11-02T18:20:02.207 回答