【问题标题】:Cmd module '~' completionCmd 模块 '~' 完成
【发布时间】:2014-03-02 13:48:39
【问题描述】:

我一直在玩 cmd python 模块,并正在查看文本完成功能。我一直试图让它扩展/识别“~”到我的主目录,但无济于事。

我注意到我可以通过覆盖 cmd 模块中的 completedefault(self, *ignored) 方法来处理默认完成。其中ignored 是文本、行、begidx、endidx 的元组。如果我输入命令my_command ./folder,text 参数将是'./folder',这意味着我可以执行以下操作:glob.glob(text + '*') 返回该文件夹中所有文件的列表。但是,如果我现在执行my_command ~/folder,则text 变量现在只包含/folder,因此我无法使用os.path.expanduser(text) 来确定该文件夹的绝对路径并显示该文件夹中的所有文件。

基本上,我想知道是否有人可以指出我正确的方向,以便扩展其中包含 ~ 的路径。

【问题讨论】:

  • 您需要隔离感兴趣的事物。 expanduser('~/folder') 会给你你想要的。你能用begidx/endidx吗?

标签: python cmd tab-completion tilde


【解决方案1】:

扩展答案来自:https://stackoverflow.com/a/6657975/1263565

您可以使用以下命令覆盖 cmd 模块的 completedefault() 方法:

def completedefault(self, *ignored):
        # Set the autocomplete preferences
        readline.set_completer_delims(' \t\n;')
        readline.parse_and_bind("tab: complete")
        readline.set_completer(complete)

完整的方法看起来像:

def complete(text, state):
    return (glob.glob(os.path.expanduser(text)+'*')+[None])[state]

这现在应该允许~ 扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 2013-04-04
    • 1970-01-01
    • 2017-01-10
    • 2012-11-02
    • 2016-12-07
    • 1970-01-01
    • 2018-03-04
    相关资源
    最近更新 更多