当前位置: 首页 > 面试题库 >

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

鄂育
2023-03-14
问题内容

如何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

问题答案:

看看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完成机制设置的环境变量,以查看其是否需要采取行动。如果它起作用,则退出程序。如果不起作用,这是对程序的正常调用,该函数不执行任何操作,并且程序的正常流程继续进行。



 类似资料:
  • 我试图在片段中创建自定义listView,我搜索了其他问题,但找不到任何东西。我的列表适配器是这样的 我的片段类是这样的: } 问题是这部分:CustomList adapter=新CustomList(tab1.this,string,imageId);构造函数(public CustomList(活动上下文,字符串[]web,整数[]imageId))只接受活动 我怎样才能解决这个问题?

  • 我正在我的android应用程序中实施Fit-bit rest客户端授权。我使用自定义选项卡打开Fitbit授权URL,如“https://www.fitbit.com/oauth2/authorize?response_type=code 未报告此行为的日志。 任何建议都可能有助于我理解这种行为。

  • 在我的应用程序中,我通过Chrome自定义标签打开了一个url。我们知道,当用户点击设备后退按钮或自定义后退按钮时,Chrome自定义标签会被关闭。是否有可能关闭Chrome自定义标签通过编程而不需要用户干预。

  • 在Bootstrap 4中,我们已经加了一系列的全局选项,让你能够在项目中轻松定制所有的组件。这些选项通过Sass变量来处理。通过内置的Gruntfile,可以简单改变一个变量的值,并重新编译。 可用的变量 您可以在_variables.scss文件找到这些变量并自定义这些变量。 变量 值 Description $spacer 1rem (默认), 或者任何大于0的值 为间隔工具指定默认的间隔值

  • 在使用网页视图时,我可以使用重新加载()来刷新网页。但是在Chrome自定义标签中,我如何重新加载网页?请引导我。 谢谢

  • 有没有办法使用自定义Chrome标签页发送带有网址的帖子数据?就像使用网络视图一样: 在留档或示例中找不到任何相关信息。