如何在Python交互式环境中添加命令?

2 投票
3 回答
2688 浏览
提问于 2025-04-16 06:04

我想在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()

这个方法效果还不错,但我仍然想了解其他解决方案。

3 个回答

0

我觉得你需要用到cmd模块。

你可以在这里查看一个教程: http://wiki.python.org/moin/CmdModule

7

你可以试试 ipython,它提供了一个Python的命令行界面,这里可以做很多事情,包括 自动添加括号,这样你就可以像你想要的那样看到函数调用了。

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就会停止执行,而改进后的交互会话会变得更加流畅。

撰写回答