我不太清楚如何使用argparse和argcomplete。我正在尝试编写一个使用Bash调用Python脚本的完成脚本,该脚本使用argparse/argcomplete
Bash脚本:
#!/usr/bin/bash
_comp_func() {
local cmds=${COMP_WORDS[@]}
COMPREPLY=()
COMPREPLY=`python argcomp.py $cmds`
}
Python脚本argcomp.py
:
!/usr/bin/env python3
import sys
from os import environ as ENV
sys.path += ["...path to argcomplete module"]
import argcomplete, argparse
def TestCompleter(**kwargs):
return "foo bar baz"
def main():
parser = argparse.ArgumentParser(prog='argc')
parser.add_argument('--foo', action='store_true')
args = parser.parse_args()
completer = TestCompleter
completer(parser=parser)
argcomplete.autocomplete(parser)
if __name__ == "__main__":
main()
其思想是,当我键入argc
并点击时,我可以使用argcomplete生成一个完成列表
如果我键入argc <TAB>
,则返回:
usage: argc [-h] [--foo]
argc: error: unrecognized arguments: argc
如果我键入argc --foo<TAB>
,那么它返回相同的内容
如果我键入argc foo
或其他任何内容,它将返回:
usage: argc [-h] [--foo]
argc: error: unrecognized arguments: argc foo
因此,它不会将程序名称本身识别为参数。我认为这是由argparse.ArgumentParser()
本身处理的,但当这不起作用时,我尝试添加argc
作为ArgumentParser()
方法的程序。那也没用
我甚至尝试将命令从argc
更改为baz
,以防万一这是一个保留字问题。据我所知不是这样。有谁能告诉我我做错了什么,以及如何让这个简单的例子起作用
目前没有回答
相关问题 更多 >
编程相关推荐