Estou construindo um utilitário de linha de comando que requer seis informações para funcionar corretamente. Se parece com isso:
fm-git filename repository path comment username password
No entanto, em qualquer sistema individual, username
e password
será constante.
Ao executar o utilitário, estou encontrando dificuldades para 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 dos argumentos username
e , já que eles geralmente não mudam e podem ser eliminados da chamada do utilitário.password
Quando os argumentos do utilitário são muitos, mas obrigatórios, qual é a prática aceita para manter a legibilidade da chamada do utilitário?
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
, estilo em X simples, etc.)um arquivo de configuração, se o kit de ferramentas ainda não fornecer um.
opções de linha de comando, tanto na forma curta quanto na forma longa (fácil com
getopt
em C)padrões razoáveis se nenhuma informação for fornecida, por exemplo, o diretório atual para um caminho
Os 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 -
).Quem usa 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.
Em geral, é uma boa ideia:
filename
o mesmo que$(basename repository)
, portanto, pode exigir apenas repositório, mas tem a opção--filename
de fornecer um nome de arquivo alternativo.ps
saída. Coloque-os em algum arquivo: pode ser$HOME/.fm-git.conf
, dê ao arquivo mais restrições comochmod 600 $HOME/.fm-git.conf
e leia-os do arquivo. Às vezes, também é uma opção obter o nome de usuário e a senha das variáveis de ambiente (como o nome de usuário padrão é o nome de usuário do sistema ouSUDO_USER
), mas pode ser que não seja o seu caso.Então, depois dessas 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 ainda mais, mas exigirá digitar mais se executar seu programa principalmente com as mãos do cli.De qualquer forma, ao escrever seu programa em Python, recomendo que você use o módulo argparse - ele o ajudará a analisar os parâmetros e a fazer alterações no futuro, se desejar alterá-los.