如何使用python3 cmd库允许包含空格的参数?



我正在使用cmd库来创建具有代码完成功能的简单命令行界面。当命令参数包含特殊字符时出现问题。代码完成仅在由这些特殊字符分隔的最后一部分运行。

以下是测试它的简单代码:

class Test(Cmd):
def complete_test(self, text, line, b, e):
print(text)
print(line)
print(b)
print(e)

键入包含斜杠等的test和参数。只有/后的最后一部分包含在text中,如果您退回某些东西,则只会替换最后一部分。

我在此答案下使用了注释来解决其他特殊字符的问题。但我不能只做readline.set_completer_delims(""),因为代码完成不起作用。我至少需要将空格设置为分隔符(readline.set_completer_delims(" ")),以便代码完成找到参数开始的位置。但是现在我无法传递包含空格的路径(请参阅下面的完成代码):

def complete_export(self, text:str, line:str, begidx, endidx):
return [x for x in glob(text + "*") if x.startswith(text)]

我的export命令只需要一个参数 - path,因此理想的行为是将第一个空格视为参数的开头,而其他空格将被视为路径的一部分。

注意:我已经意识到可以使用line参数并手动提取路径,但代码完成仍然只会替换最后一部分,因此必须编辑路径。我提交了这个作为答案,但这不是非常优雅的解决方案。

这是手动将路径与line分开的解决方案,执行通配并在已经存在的空格之后仅返回部分路径。一个问题是,如果路径包含空格,如果按两次 Tab 键,则只会获得空格后其余文本的建议。根据用例,这可能是问题。

def complete_export(self, text:str, line:str, begidx, endidx):
path = line[line.find(" ")+1:]  # get everything after space
return [" ".join(x.split(" ")[(line.count(" ") - 1):]) for x in glob(path + "*")]  # completion suggestions after last space

相关内容

  • 没有找到相关文章

最新更新