Skip to content

nargs=argparse.REMAINDER can break config file option parsing #285

@stxue1

Description

@stxue1

Example:

import configargparse

parser = configargparse.ArgParser()
parser.add_argument("--config", is_config_file_arg=True, default="config.cfg")
parser.add_argument('--config_file_option', nargs="*", default=None) # also happens with action="append" and any of its derivatives
parser.add_argument("remainder_option", nargs=argparse.REMAINDER, default=None)
args = ["test"]
options = parser.parse_args(args)

With config.cfg:

config_file_option=Option from config file

remainder_option should be ["test"], but it swallows the config file and becomes ["test", "--config_file_option=Option from config file"], which results in all config file options not being set.

I believe it is due to these lines:

if (action and action.nargs or
isinstance(action, argparse._AppendAction)):
nargs = True
if nargs:
args = args + config_args
else:
args = config_args + args

It looks like if there is any other argument with nargs or action="append", then it will put all config options after the remainder option instead of before.

Changing it to args = config_args + args fixes this, but will probably break #144.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions