Argparse是否包含argcomplete无法识别的参数?

2024-06-24 13:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我不太清楚如何使用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,以防万一这是一个保留字问题。据我所知不是这样。有谁能告诉我我做错了什么,以及如何让这个简单的例子起作用


Tags: import脚本bashparser键入binfoomain