Skip to content

Ignoring convention that -- separate non-flag arguments in bash (apart from last -- for fire flags) #580

@jbcdnr

Description

@jbcdnr

Beyond the fact that fire uses the last -- to separate flag argument from command arguments, it seems that previous -- are not parsed correctly. At least according to the common convention that a double dash ( -- ) is used in most Bash built-in commands and many other commands to signify the end of command options, after which only positional ("non-option") arguments are accepted (source).

I would like to use this to pass some other commands to a fire command, without the flags targeted to the extra command being parsed by fire. Here is a minimal example test.py:

import fire


def foo(*args: str, flag: int = 2) -> None:
    print(f"{args=} {flag=}")


fire.Fire(foo)

Current behavior:

$ python test.py -- other args 1 2 --flag 3 --
args=('args', 1, 2) flag=3
ERROR: Could not consume arg: --
Usage: test.py -- other args 1 2 -

For detailed information on this command, run:
  test.py -- other args 1 2 - --help

Expected behavior:

python test.py -- other args 1 2 --flag 3 --
args=('args', 1, 2, "--flag", 3) flag=2

Would you be fine with updating the parsing rules in

2a. If the current component is a class, instantiate it using args from args.
to consider all remaining args as positional arguments if it encounter a -- ? I could work on a PR if there is no major blocker.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions