python argparse中的自定义选项卡完成

发布于 2021-01-29 15:09:54

如何argparse在Python脚本中与Shell选项卡完成协作?

#!/usr/bin/env python
import argparse

def main(**args):
    pass

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('positional', choices=['spam', 'eggs'])
    parser.add_argument('--optional', choices=['foo1', 'foo2', 'bar'])
    args = parser.parse_args()
    main(**vars(args))

在.py文件上设置了可执行标志后,预期结果应类似于:

$ ./example.py sp<tab>             
   ->  completes to "./example.py spam"
$ ./example.py --op<tab> 
   ->  completes to "./example.py --optional"
$ ./example.py --optional b<tab>
   ->  completes to "./example.py --optional bar"
$ ./example.py --optional f<tab>   
   ->  completes to "./example.py --optional foo"
       and, additionally, prints  "foo1  foo2"  choices on stdout on a new line
关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    看看argcomplete由安德烈Kislyuk。

    通过以下方式安装:

    pip install argcomplete
    

    导入模块并在调用之前在源代码中添加一行parser.parse_args()

    #!/usr/bin/env python
    
    import argparse as ap
    import argcomplete
    
    def main(**args):
      pass
    
    if __name__ == '__main__':
      parser = ap.ArgumentParser()
      parser.add_argument('positional', choices=['spam', 'eggs'])
      parser.add_argument('--optional', choices=['foo1', 'foo2', 'bar'])
      argcomplete.autocomplete(parser)
      args = parser.parse_args()
      main(**vars(args))
    

    并确保bash知道此脚本,请使用

    eval "$(register-python-argcomplete your_script)"
    

    您应该将该行放在您的代码中,~/.bashrc或遵循argcomplete的文档并激活“全局”完成。

    之后,您可以根据要求完成工作。

    其工作方式是评估行创建_python_argcomlete使用进行注册的功能complete。(register-python- argcomplete your_script只看一下评估成bash的内容)。自动完成功能会查找bash完成机制设置的环境变量,以查看其是否需要采取行动。如果它起作用,则退出程序。如果不起作用,这是对程序的正常调用,该函数不执行任何操作,并且程序的正常流程继续进行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看