AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 407038
Accepted
Chuck
Chuck
Asked: 2017-11-26 13:27:10 +0800 CST2017-11-26 13:27:10 +0800 CST 2017-11-26 13:27:10 +0800 CST

Qual é a interface recomendada para um utilitário que requer muitos parâmetros? [fechado]

  • 772
Fechado . Esta pergunta é baseada em opinião . No momento, não está aceitando respostas.

Quer melhorar esta questão? Atualize a pergunta para que possa ser respondida com fatos e citações editando esta postagem .

Fechado há 4 anos .

Melhore esta questão

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, usernamee passwordserá 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 usernamee , 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?

command-line arguments
  • 2 2 respostas
  • 51 Views

2 respostas

  • Voted
  1. dirkt
    2017-11-27T03:38:58+08:002017-11-27T03:38:58+08:00

    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 getoptem 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.

    • 2
  2. Best Answer
    Fedor Dikarev
    2017-11-27T04:18:58+08:002017-11-27T04:18:58+08:00

    Em geral, é uma boa ideia:

    1. calcula argumentos dependentes, mas permite redefini-los: por exemplo, em seu exemplo, você tem filenameo mesmo que $(basename repository), portanto, pode exigir apenas repositório, mas tem a opção --filenamede fornecer um nome de arquivo alternativo.
    2. ocultar a autenticação da linha de comando e da pssaída. Coloque-os em algum arquivo: pode ser $HOME/.fm-git.conf, dê ao arquivo mais restrições como chmod 600 $HOME/.fm-git.confe 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 ou SUDO_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.

    • 1

relate perguntas

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • Fazendo mysql CLI me pedir uma senha interativamente

  • Pub / sub de linha de comando sem um servidor?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve