如何在Python交互式环境中添加命令?
我想在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
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就会停止执行,而改进后的交互会话会变得更加流畅。