python - 带有 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()
方法的程序。那也没有用。
我什至尝试将命令从argc
to更改为baz
,以防万一这是保留字问题。据我所知不是。谁能指导我在这里做错了什么,以及如何使这个简单的示例正常工作?
解决方案
推荐阅读
- javascript - 我是否需要取消订阅已完成的流?
- python-3.x - 将 xml 文件从 url 解析为 astropy votable 而无需下载
- javascript - 使用 AJAX 和 JSON 从 JavaScript 发送数据到服务器并从服务器检索数据
- android - 即使设置为 Xamarin Forms v4.2.0.848062 也没有可启动的活动
- javascript - Paypal 结帐按钮,不适用于 Node.js 和 Express
- c# - 在 c# 中使用新版本的 chromedriver、chrome 和 selenium 时出现点击问题
- numpy - 在 numpy 中交换值和索引
- c# - 从 sqlite 查询时 DateTime 不正确
- sql-server - 在 SQL 中声明标量变量错误 - SSMS
- vue.js - 使用其他浏览器时如何在 Vue.js 中设置警报?