Ordem entre opções e operandos?

2

Ao usar um programa utilitário, podemos especificar opções (e seus argumentos de opção) e / ou operandos.

Na maioria dos casos (no sentido de estar em conformidade com algum padrão (POSIX?))

  • o pedido entre opções não importa?
  • a ordem entre os operandos é importante? (por exemplo, os operandos de find são ordenados, então são grep )
  • a ordem entre opções e operandos é importante? (por exemplo, ls . -l e rm mydir -r são considerados não POSIX compatível. )
  • se uma opção puder ter opcionalmente um argumento de opção, como o programa saberá se algo seguindo a opção for o argumento da opção ou um operando?

Btw, faça a biblioteca de análise de argumentos padrão em C (por exemplo, getopt) e em Python (por exemplo, argparse ) está de acordo com o mesmo padrão para opções e operandos?

C.f link

    
por Tim 30.03.2015 / 18:43

1 resposta

2

Bem, a Diretriz Sintax do Utilitário pode responder à sua pergunta sobre a ordem das opções, e é o relacionamento com outras opções:

Guideline 11:

The order of different options relative to one another should not matter, unless the options are documented as mutually-exclusive and such an option is documented to override any incompatible options preceding it. If an option that has option-arguments is repeated, the option and option-argument combinations should be interpreted in the order specified on the command line.

O único local em que é importante fazer o pedido é na documentação :

  1. Options are usually listed in alphabetical order unless this would make the utility description more confusing. There are no implied relationships between the options based upon the order in which they appear, unless otherwise stated in the OPTIONS section, or unless the exception in Guideline 11 of Utility Syntax Guidelines applies. If an option that does not have option-arguments is repeated, the results are undefined, unless otherwise stated.

No entanto, se você tiver um comando em que um argumento não precise de uma opção e outro que possua, você poderá agrupar com apenas um símbolo - , já que o argumento com opções vem depois daquele que não possui: / p>

Guideline 5:

One or more options without option-arguments, followed by at most one option that takes an option-argument, should be accepted when grouped behind one '-' delimiter.

Como o POSIX é um padrão, cabe aos programadores de uma tecnologia torná-la compatível ou não, e como manipular os argumentos_da_opção. Você poderia criar um programa Python ArgPPix não POSIX com o código a seguir :

>>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
>>> parser.add_argument('+f')
>>> parser.add_argument('++bar')

Desta forma, os argumentos do seu programa começarão com + , não sendo POSIX quando confrontados com a Diretriz 4:

Guideline 4:

All options should be preceded by the '-' delimiter character.

E sobre o pedido, é apenas uma questão de usar a função .parse_args() para decidir onde seus argumentos serão fixados em uma posição. Para argparse lib, não há operando. Tudo é um argumento. Um operando aqui é apenas um argumento sem o caracter - , e novamente, cabe ao programador decidir se o software que está sendo feito será o compilador POSIX ou não.

Se implementado da maneira correta, o argparse é compatível com POSIX. Sugestão de leitura :

  • argparse - Opção de linha de comando e análise de argumentos

Itens relacionados:

por 30.03.2015 / 21:18