我正在嘗試爲我使用Cmd模塊編寫的主控制檯創建一個調試控制檯。嵌套解釋器中的python Cmd模塊自動完成錯誤
調試控制檯應該具有所有主控制檯屬性,並且在調試和高級用戶的使用上有更多的擴展。
的最佳答案杉我的需求是以下後的第二個答案: object inheritance and nested cmd
我的實現目前看起來是這樣的:
class MainConsole(cmd.Cmd):
def __init__(self):
cmd.Cmd.__init__(self)
def do_something(self, line):
print "do something!"
return
def do_something2(self, line):
print "do something2!"
return
class SubConsole1(cmd.Cmd):
def __init__(self, maincon):
cmd.Cmd.__init__(self)
self.maincon = maincon
self.register_main_console_methods()
def register_main_console_methods(self):
main_names = self.maincon.get_names()
for name in main_names:
if (name[:3] == 'do_') or (name[:5] == 'help_') or (name[:9] == 'complete_'):
self.__dict__[name] = getattr(self.maincon, name)
觀察:
當我點擊「幫助」,我確實看到了所有上層控制檯方法,並且能夠調用它們。
問題:
的實際命令的自動完成不可用。
shell打擊「some」和tab時的預期行爲是將其自動完成爲「某事」。這不會發生。
當我試圖調試該問題時,我發現self.get_names()
方法使用的self.completenames()
函數返回註冊之前的方法列表。
所以實際發生的是新添加的方法從嵌套控制檯「移除」,儘管我可以調用它們。
我很想談談這方面的一些見解。
謝謝!
嗨@Xavier,謝謝你的回答。這個解決方案對我來說不起作用,因爲主控制檯擁有一個連接到服務器和一些邏輯的客戶端實例。所以我真的想要利用主控制檯實例。 – cyber101
謝謝,它的工作原理。但是現在,本地「do_」方法在幫助菜單中不存在(雖然可以調用),但其幫助不可用。 – cyber101
發生了什麼是'do_help'方法被替換,所以調用的方法是'MainConsole' –