python-3.x - 单击自定义多命令和 bash 完成
问题描述
我按照 Click 文档中的示例来实现 自定义多命令,然后我想将其与 Bash 完成支持结合起来,如此处所述。当我尝试使用 TAB 完成时,结果是在我的程序名称而不是自定义命令之后插入了“cli”...
$ mycommand <Press TAB 2x>
$ mycommand cli
并不是说我的自定义多命令都没有被命名为“cli”。
有没有办法解决?
(下面复制自定义多命令示例代码)
import click
import os
plugin_folder = os.path.join(os.path.dirname(__file__), 'commands')
class MyCLI(click.MultiCommand):
def list_commands(self, ctx):
rv = []
for filename in os.listdir(plugin_folder):
if filename.endswith('.py'):
rv.append(filename[:-3])
rv.sort()
return rv
def get_command(self, ctx, name):
ns = {}
fn = os.path.join(plugin_folder, name + '.py')
with open(fn) as f:
code = compile(f.read(), fn, 'exec')
eval(code, ns, ns)
return ns['cli']
cli = MyCLI(help='This tool\'s subcommands are loaded from a '
'plugin folder dynamically.')
if __name__ == '__main__':
cli()
解决方案
点击自动完成将您的子命令命名为如下所示似乎很重要:
@click.command(name="<YOUR_CMD_NAME>")
然后您所要做的就是按照文档中的说明设置正确的 env var 。
eval "$(_FOO_BAR_COMPLETE=source_bash foo-bar)"
推荐阅读
- c++ - 当我通过 OMP(C++)生成随机数时出现一个奇怪的问题
- python - 如何使用正则表达式查找子字符串
- html - 难以将蓝色变为透明
- c - 尝试连接到单独线程上的不同端口时,套接字发送失败并出现 10054 错误
- authentication - NextAuth 凭证安全吗?
- arrays - 按值而不是索引对 Perl 数组进行切片的惯用方法
- kubernetes - K8S/EKS - 重新平衡内存比率
- python - 匹配的查询不存在。Django 错误
- sql - SQL 在几个日期之前获取 count(*)
- tableau-api - 在 LOD 中使用 RANK:详细级别表达式不能包含表计算或 Tableau 中的 attr 函数