比较来自世界各地的卖家的域名和 IT 服务价格

完成自定义选项卡 python argparse

如何结束 shell tab, S.合作
argparse

在脚本中 Python?


#!/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> 
-&gt; completes to "./example.py spam"
$ ./example.py --op<tab>
-&gt; completes to "./example.py --optional"
$ ./example.py --optional b<tab>
-&gt; completes to "./example.py --optional bar"
$ ./example.py --optional f<tab>
-&gt; completes to "./example.py --optional foo"
and, additionally, prints "foo1 foo2" choices on stdout on a new line


</tab></tab></tab></tab>
已邀请:

冰洋

赞同来自:

看一看
https://argcomplete.readthedoc ... plete
andrei 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 并激活结束 'global'.

之后,您根据请求完成工作。

它适用于字符串 eval 创建一个功能
_python_argcomlete

, 哪个注册
complete

. /发射
register-python-argcomplete your_script

, 只是看看将被评为什么 bash/. 自动完成功能正在寻找完成机制设置的环境变量 bash, 找出我是否需要采取行动。 如果它是行动,他就会离开该计划。 如果它不起作用,这是对没有任何作用的程序,并且程序的正常流程继续。

八刀丁二

赞同来自:

对于自动完成操作,您需要一个函数 bash 要生成可能的选项,然后您需要运行
complete -F <function_name> <program_name>


这样做的最佳方法是强制该程序基于您自己的语法分析算法生成完成功能,以避免重复。 然而,慢慢地看看 argparse, 我找不到进入其内部结构的方法,但我建议你寻找她。

这是一个函数, bash, 对上述计划做些什么:


function _example_auto// {
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}

case "$prev" in
--optional /
COMPREPLY=/ $/compgen -W "foo1 foo2 bar" -- $cur/ /
return 0
;;
*/
COMPREPLY=/ $/compgen -W "--optional spam eggs" -- $cur/ /
return 0
;;
esac
}


</program_name></function_name>

要回复问题请先登录注册