python-3.x - 如何使用 python3 cmd 库允许包含空格的参数?
问题描述
我正在使用cmd
库来创建带有代码完成功能的简单命令行界面。当命令参数包含特殊字符时会出现问题。代码完成仅在由这些特殊字符分隔的最后一部分运行。
这是测试它的简单代码:
class Test(Cmd):
def complete_test(self, text, line, b, e):
print(text)
print(line)
print(b)
print(e)
test
包含例如斜杠的类型和参数。/
中仅包含after 的最后一部分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
命令只需要一个参数 - 路径,因此理想的行为是将第一个空格视为参数的开头,而其他空格将被视为路径的一部分。
注意:我意识到可以使用line
参数并手动提取路径,但代码完成仍将仅替换最后一部分,因此必须编辑路径。我将此作为答案提交,但这不是非常优雅的解决方案。
解决方案
这是手动将路径从 中分离出来的解决方案line
,执行通配符并在已经存在的空格之后仅返回部分路径。一个问题是,如果路径包含空格,如果您按两次制表符,您只会得到空格后其余文本的建议。根据用例,这可能是个问题。
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
推荐阅读
- http - curl 正在发送 --data-binary base64 编码
- android - su: setgid failed: Operation not allowed error in aosp
- reactjs - 元素消失得太快,Jest 没有注意到
- python - 如何在主机 Docker Windows 上本地保存文件
- html - Jinja 模板继承但不能在其他文件上修改它
- liquibase - generateChangeLog 不导出 databasechangelog 表
- javascript - 无法连接到 Firebase 实时数据库 (Node.js)
- java - 使用 Spring Boot 时出现 400 错误请求
- ios - 哪款 iPad 可以与最新的 Xcode 一起用于 iOS 开发?
- python - 有没有办法让 .exe 文件在 Windows 10 PC 启动/启动时自动启动,仅在 CMD/终端中?