python argparse 自动完成文件路径

ihd*_*hdv 8 python bash argparse

所以我有一个 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
Run Code Online (Sandbox Code Playgroud)

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

folder/
  main.py
  configs/
    config_1.txt
Run Code Online (Sandbox Code Playgroud)

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

folder/
  main.py
  configs/
    config_1.txt
Run Code Online (Sandbox Code Playgroud)

我希望按一个选项卡会给出:

user@host:~/folder$ python main.py -c con
Run Code Online (Sandbox Code Playgroud)

然后另一个选项卡给出

user@host:~/folder$ python main.py -c config/
Run Code Online (Sandbox Code Playgroud)

我尝试过添加

import argcomplete
argcomplete.autocomplete(parser)
Run Code Online (Sandbox Code Playgroud)

但没有用。

小智 6

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

python main.py -c=<your path>
Run Code Online (Sandbox Code Playgroud)

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