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