Como adiciono um sinalizador opcional aos meus argumentos de linha de comando?
por exemplo. para que eu possa escrever
python myprog.py
ou
python myprog.py -w
eu tentei
parser.add_argument('-w')
Mas eu recebo uma mensagem de erro dizendo
Usage [-w W]
error: argument -w: expected one argument
pelo que entendi significa que deseja um valor de argumento para a opção -w. Como é aceitar apenas uma bandeira?
Estou achando http://docs.python.org/library/argparse.html bastante opaco nesta questão.
python
command-line-arguments
argparse
interstar
fonte
fonte
Respostas:
Como você o entende, o argumento w está esperando um valor após -w na linha de comando. Se você deseja ativar um switch configurando uma variável
True
ouFalse
consulte http://docs.python.org/dev/library/argparse.html#action (especificamente store_true e store_false)onde
action='store_true'
implicadefault=False
.Por outro lado, você poderia ter
action='store_false'
, o que implicadefault=True
.fonte
w
é sempreFalse
.Adicionando um snippet rápido para prepará-lo para execução:
Fonte: myparser.py
Uso:
fonte
Aqui está uma maneira rápida de fazer isso, não exigirá nada além de
sys
.. embora a funcionalidade seja limitada:flag = "--flag" in sys.argv[1:]
[1:]
se o nome completo do arquivo for--flag
fonte
--flag
, ele se comportará inesperadamente, e o pior é que isso geralmente acaba sendo uma falha de segurança no caminho, quando dados não confiáveis acabam sendo passado para argv. No final, esse método simplesmente não deve ser feito. Analisadores arg reais são apenas muito mais robusto ...