google / google/python-fire

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

未關閉
#580 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
28.2k
分支
1.5k
PR 合併指標
30 天內沒有已合併 PR

描述

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](https://unix.stackexchange.com/a/11382)).

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`:

```python
import fire

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

fire.Fire(foo)
```

Current behavior:
```bash
$ 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:
```bash
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 https://github.com/google/python-fire/blob/6cf45c663075c96b20dd0dfa733c2374545a4ad6/fire/core.py#L376 to consider all remaining args as positional arguments if it encounter a `--` ? I could work on a PR if there is no major blocker.

貢獻指南

開啟貢獻指南

研究方向

Start by reproducing the minimal test.py example and then inspect fire/core.py around line 376, where argument parsing is identified. Trace how multiple `--` arguments are handled. Done means the earlier `--` causes remaining arguments, including `--flag 3`, to be treated positionally while the final `--` remains handled as shown in the expected output.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
cli
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。