首页 > 解决方案 > 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”之间进行选择。可能是我在主要问题上不清楚,表明我已经详细说明了。

标签: pythonlinuxautocomplete

解决方案


当您按 Tab 键时,您的 shell 会收到一个字符串列表(可能的补全)。

  • 您可以注册一个 Bash 函数来完成 Python 脚本(请参阅此答案),以便在命令行完成之前不会调用您的 Python 脚本。
  • 或者你用你的 Python 脚本来做(见这个答案,argcomplete它与 混合得很好argparse)。在这种情况下,您的 Python 脚本确实已执行,但在计算完可能的完成后,它将退出,因此不会运行其他任何内容。换句话说,它将被重复调用以提供完成建议,然后在最后使用完整的命令行来完成它的实际工作。

根据参数仅显示具有某些扩展名的文件“只是”自定义完成程序的问题。
你的问题实际上只是另一个的重复但你似乎没有看到它。如果误会真的是在我这边,请提供详细的解释。


推荐阅读