我正在尝试为我在Python中定期输入的命令保存一些按键。
在我的python startup script中,我定义了一个名为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()
它运作良好,但我仍然对替代解决方案感兴趣。
答案 0 :(得分:7)
你可以尝试ipython - 它提供了一个python shell,它允许包含automatic parentheses在内的许多内容,它可以根据你的要求为你提供函数调用。
答案 1 :(得分:0)
我认为您需要cmd模块。
答案 2 :(得分: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将停止执行,改进的交互式会话将是无缝的。