Qual é a interface de recomendação para um utilitário que requer muitos parâmetros? [fechadas]

0

Estou criando um utilitário de linha de comando que requer seis informações para funcionar corretamente. Parece assim:

fm-git filename repository path comment username password

No entanto, em qualquer sistema individual, username e password serão constantes.

Ao executar o utilitário, estou achando difícil construir. Por exemplo, aqui está uma chamada de teste para o utilitário (dividida em várias linhas para facilitar a leitura):

/Users/chuck/Projects/fm-git/fm-git.py chiv-lib
/Users/chuck/Projects/chiv-lib/ Chivalry/ "continued testing"
Administrator abc1234

Estou considerando maneiras diferentes de passar esses argumentos. Por exemplo, fm-git -f filename -r repository ... ou fm-git --filename filename --repository repository... . Também estou pensando em fazer as definições de configuração username e password , já que elas geralmente não são alteradas e podem ser eliminadas da chamada do utilitário.

Quando os argumentos do utilitário são muitos, mas obrigatórios, qual é a prática aceita para manter a legibilidade das chamadas de utilidades?

    
por Chuck 25.11.2017 / 22:27

2 respostas

1

Em geral, é boa ideia:

  1. calcule os argumentos dependentes, mas permita redefini-los: por exemplo, no seu exemplo você tem filename igual a $(basename repository) , portanto, você pode exigir apenas repositório, mas tem a opção --filename para fornecer nome de arquivo alternativo.
  2. ocultar a autenticação da linha de comando e ps output. Coloque-os em algum arquivo: pode ser $HOME/.fm-git.conf , dê mais restrições ao arquivo como chmod 600 $HOME/.fm-git.conf e leia-os do arquivo. Às vezes, também é uma opção para obter o nome de usuário e senha de variáveis de ambiente (como nome de usuário padrão é o nome de usuário do sistema ou SUDO_USER ), mas pode não ser o seu caso.

Então, depois das duas otimizações você tem apenas 3 parâmetros cli, é aceitável, eu acho. Sinta-se à vontade para usá-los como parâmetro posicional ou fornecer alguns sinalizadores como --comment : fornecer sinalizadores longos aumentará a legibilidade se você usar seu programa em scripts mais detalhadamente, mas precisará digitar mais se executar seu programa principalmente por meio de cli .

De qualquer forma, enquanto você escreve seu programa em Python, recomendo que use o módulo argparse - ele ajudará você a analisar parâmetros e fazer alterações no futuro, caso deseje alterá-los.

    
por 26.11.2017 / 13:18
2

Normalmente, os aplicativos unix permitem várias maneiras de fornecer essas informações, com as formas mais "específicas" substituindo as menos específicas.

Então você tem:

  • Para aplicativos gráficos, o kit de ferramentas usado quase sempre fornece alguma maneira de ter recursos (por exemplo, xrdb -style no X simples, etc.)

  • um arquivo de configuração, se o kit de ferramentas ainda não fornecer um.

  • opções de linha de comando, de forma curta e longa (fácil com getopt em C)

  • padrões razoáveis se nenhuma informação for fornecida, por exemplo, o diretório atual de um caminho

Parâmetros posicionais só fazem sentido para alguns obrigatórios, seguidos possivelmente por uma lista de arquivos (porque as especificações curinga se expandem para vários parâmetros). Seis peças individuais são demais; a ordem é difícil de lembrar, então use opções para isso.

Para senhas, pode ser útil fornecer uma maneira de fazer o aplicativo ler a senha do stdin, possivelmente usando um valor especial (por exemplo, --password - ou -p - ).

O usuário que usar o aplicativo pode escolher se senhas codificadas, senhas em arquivos de configuração ou permitir que o usuário insira a senha é a melhor opção para o caso de uso específico.

    
por 26.11.2017 / 12:38