【问题标题】:python argparse autocompletion with file paths带有文件路径的python argparse自动完成
【发布时间】:2022-03-22 22:02:39
【问题描述】:

所以我有一个 python 程序可以读取这样的配置文件:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-c', '--config',  type=str, help='config file', required=True)

args = parser.parse_args()
cfg_filename = args.config

我希望能够在 bash 中自动完成路径。例如,假设上述程序名为main.py,并且有一个名为config_1.txt的配置文件,结构如下:

folder/
  main.py
  configs/
    config_1.txt

假设在我的终端中它看起来像

user@host:~/folder$ python main.py -c con

我希望按一个标签可以:

user@host:~/folder$ python main.py -c config/

然后另一个选项卡给出

user@host:~/folder$ python main.py -c config/config_1.txt

我已经尝试添加

import argcomplete
argcomplete.autocomplete(parser)

但没用。

【问题讨论】:

  • 您是否尝试注册(或重新注册)一个完整的功能? kislyuk.github.io/argcomplete/#common-problems
  • 你练习过更简单的情况吗,比如choices的参数?我在您的设置中看不到任何告诉完成者您想要目录中的任何内容的内容。您的 'config' 参数只需要一个字符串,没有任何指示(除了help)它应该是一个文件名,更不用说 shell 应该搜索的位置了。
  • 您的 shell 是否会自动完成 tab 上的路径与您正在调用的程序无关....当您在 bash 解释器上键入时,python 没有运行,所以您的程序不可能做你所描述的,如果那个目录结构存在,bash会自动完成它就好了。

标签: python bash argparse


【解决方案1】:

对我来说,在参数名称之后使用等号(“=”)可以使自动完成功能起作用,并建议到目前为止与输入路径匹配的所有文件。例如,尝试:

python main.py -c=<your path>

当我不使用“=”符号时,自动完成功能仅适用于以“.py”扩展名结尾的文件夹和文件。背后的可能原因可能是为 python 安装了完成脚本。更多信息请看这里:https://www.reddit.com/r/bash/comments/b8oqeg/comment/ek1ds7t/?utm_source=share&utm_medium=web2x&context=3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2014-06-24
    • 2020-04-22
    相关资源
    最近更新 更多