首页 > 解决方案 > 带有 argcomplete 的 Argparse - 无法识别的参数?

问题描述

我不太清楚如何使用 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()方法的程序。那也没有用。

我什至尝试将命令从argcto更改为baz,以防万一这是保留字问题。据我所知不是。谁能指导我在这里做错了什么,以及如何使这个简单的示例正常工作?

标签: pythonbashautocompleteargparsetab-completion

解决方案


推荐阅读