簡體   English   中英

如何向Python交互式外殼添加命令?

[英]How can I add a command to the Python interactive shell?

我試圖為自己節省一些擊鍵操作,而這只是我在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()

它運作良好,但是我仍然對替代解決方案感興趣。

您可以嘗試ipython-它提供了一個python shell,它確實允許很多事情,包括自動括號 ,該括號使您可以根據需要進行函數調用。

我認為您想要cmd模塊。

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

討厭回答我自己的問題,但是還沒有一個答案適用於我使用的所有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將停止執行,並且改進的交互式會話將是無縫的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM