Ignoring convention that `--` separate non-flag arguments in bash (apart from last `--` for fire flags)
- 主要語言
- 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