Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[bug] short flags/arguments does not work with `**kwargs`

Aberta
#454 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
45/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
python
Domínio
cli

Direção de pesquisa

Execute os dois exemplos Python da issue e compare o comportamento das opções curtas com e sem kwargs. Em seguida, rastreie o parsing de argumentos do Python Fire para opções curtas e argumentos nomeados. A tarefa estará concluída quando -f e -s preencherem first_arg e second_arg, enquanto flags não relacionadas continuarem aparecendo em kwargs, com cobertura de regressão para ambos os casos.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Description:

Short flags/arguments (e.g. -u for --username) does not work with **kwargs

Example that works OK:

The following example works ok:

import fire

def cli(first_arg="left", second_arg="right"):
    """Prints the 2 arguments separated by bar
       
    Parameters
    ----------
    first_arg : str
        the first arg
    second_arg : str
        the second arg
    """
    print(f"{first_arg} | {second_arg}" )

if __name__ == '__main__':
  fire.Fire(cli)

Help output

❯ python .\example.py -- --help
NAME
    example.py - Prints the 2 arguments separated by bar

SYNOPSIS
    example.py <flags>

DESCRIPTION
    Prints the 2 arguments separated by bar

FLAGS
    -f, --first_arg=FIRST_ARG
        Default: 'left'
        the first arg
    -s, --second_arg=SECOND_ARG
        Default: 'right'
        the second arg

Usage with short flags

❯ python .\example.py -f="hello" -s="word"
hello | word

Example that does not work:

The following next example does not work with short flags, even when they are showing on the help output.
It is using **kwargs. It seems the short flags are going to the **kwargs dictionary.

import fire

def cli(first_arg="left", second_arg="right", **kwargs):
    """Prints the 2 arguments separated by bar
       
    Parameters
    ----------
    first_arg : str
        the first arg
    second_arg : str
        the second arg
    kwargs : str
        additional args
    """
    print(f"{first_arg} | {second_arg}" )
    print(kwargs)

if __name__ == '__main__':
  fire.Fire(cli)

Help output

❯ python .\example2.py -- --help
NAME
    example2.py - Prints the 2 arguments separated by bar

SYNOPSIS
    example2.py <flags>

DESCRIPTION
    Prints the 2 arguments separated by bar

FLAGS
    -f, --first_arg=FIRST_ARG
        Default: 'left'
        the first arg
    -s, --second_arg=SECOND_ARG
        Default: 'right'
        the second arg
    Additional flags are accepted.
        additional args

Usage with short flags

❯ python .\example2.py -f="hello" -s="word"
left | right
{'f': 'hello', 's': 'word'}

In summary: the -f and -s arguments should be parsing to --first_arg and --second_arg but they are parsing to kwargs

Linguagem predominante
Python
Estrelas
28.2k
Forks
1.5k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de google/python-fire

Todas as issues de google/python-fire

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.