python - cli中的python双制表符仅显示兼容文件
问题描述
请找到以下代码段:
import argparse
parser = argparse.ArgumentParser(
description="Create plot from data",
formatter_class=lambda prog: argparse.HelpFormatter(
prog, max_help_position=27))
action = parser.add_mutually_exclusive_group(required=True)
action.add_argument('--foo', help="Create foo plot") # input is <filename>.foo
action.add_argument('--bar', help="Create bar plot") # Input is <filename>.bar
我在linux终端模拟器中运行它。在 python 中,是否有可能在终端中,double tabiing 将仅显示扩展名为foo
或的文件bar
,具体取决于参数,而不是 中的所有文件PWD
?
我找到了TAB autocomplete python CLI,但那已经有十年历史了。现在有什么选择吗?
更新@Lenormju:我已将代码更新为:
action.add_argument('--foo', help="Create foo plot", choices=('agr'))
action.add_argument(
'--bar', help="Create bar plot").completer = ChoicesCompleter('.agr')
所以,现在在终端,
python ~/bin/code.py --foo [TAB][TAB]
我希望这.agr
仅显示带有扩展名的文件。相反,它仍然显示存在于PWD
.
实际上,这应该行不通,因为“选择”的意思是,我必须在“a”“g”或“r”之间进行选择。可能是我在主要问题上不清楚,表明我已经详细说明了。
解决方案
当您按 Tab 键时,您的 shell 会收到一个字符串列表(可能的补全)。
- 您可以注册一个 Bash 函数来完成 Python 脚本(请参阅此答案),以便在命令行完成之前不会调用您的 Python 脚本。
- 或者你用你的 Python 脚本来做(见这个答案,
argcomplete
它与 混合得很好argparse
)。在这种情况下,您的 Python 脚本确实已执行,但在计算完可能的完成后,它将退出,因此不会运行其他任何内容。换句话说,它将被重复调用以提供完成建议,然后在最后使用完整的命令行来完成它的实际工作。
根据参数仅显示具有某些扩展名的文件“只是”自定义完成程序的问题。
你的问题实际上只是另一个的重复,但你似乎没有看到它。如果误会真的是在我这边,请提供详细的解释。
推荐阅读
- c - 值开头的 0 未显示在输出中
- oracle - ORA-28547: 与服务器的连接失败,可能是 Oracle 网络管理员错误,但在重新启动后可以正常工作
- c - c 包含指令中的 linux 内核源代码树——它是如何工作的
- ms-access - Access 警告查询中的 case 子句存在运算符错误
- javascript - 赛普拉斯拆分字符串进行测试
- reactjs - 在 React Router 中使用 Link 和 NavLink 传递道具的问题
- sql - 如何在 SQL Server 中生成唯一的数字 ID(不使用标识)?
- visual-studio-code - 在 VsCode 强制扩展中,当我接受完成项时,我应该如何获取索引?
- python - TclError:没有显示名称
- php - 在 Laravel 8 和 jetstream 中登录后,redirect() 助手返回一个空白页面