argparse module Herhangi bir argüman olmadan seçenek nasıl eklenir?


165

Kullanarak bir komut dosyası oluşturdum argparse.

Komut dosyasının bir seçenek olarak bir yapılandırma dosyası adı alması gerekir ve kullanıcı, komut dosyasını tamamen yürütmek veya yalnızca simüle etmek isteyip istemediğini belirleyebilir.

Geçirilecek argümanlar: ./script -f config_file -sveya ./script -f config_file.

-F config_file bölümü için sorun yok, ancak sürekli olarak -s için argümanları sormaya devam ediyor.

Bunu denedim:

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file')
#parser.add_argument('-s', '--simulate', nargs = '0')
args = parser.parse_args()
if args.file:
    config_file = args.file
if args.set_in_prod:
        simulate = True
else:
    pass

Aşağıdaki hatalarla:

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'

Ve ''yerine aynı hata 0.

Yanıtlar:


233

As @Felix Kling önerdi kullanımını action='store_true':

>>> from argparse import ArgumentParser
>>> p = ArgumentParser()
>>> _ = p.add_argument('-f', '--foo', action='store_true')
>>> args = p.parse_args()
>>> args.foo
False
>>> args = p.parse_args(['-f'])
>>> args.foo
True

97

Set hiçbir değer gereken bir seçenek oluşturmak için action [docs] için bunun 'store_const', 'store_true'ya da 'store_false'.

Misal:

parser.add_argument('-s', '--simulate', action='store_true')

Merhaba; Cevabınız için teşekkürler. Dokümanda açıklandığı gibi denedim: >>> parser.add_argument ('- foo', '-f', action = 'store_true') _StoreTrueAction (option_strings = ['- foo', '-f'], dest = 'foo', nargs = 0, const = Doğru, varsayılan = Yanlış, tip = Yok, seçimler = Yok, yardım = Yok, metavar = Yok) >>> parser.parse_args () Ad alanı (foo = Yanlış) >> > print args.foo Traceback (en son çağrı): <module> AttributeError: "Namespace 'nesnesinin" <stdin> "dosyası, satır 1,' foo 'niteliği yok >>>` Bu işe yaramıyor; Atamadan sonra değeri nasıl alacağımı bilmiyorum. Bana yardım ettiğin için teşekkürler!
philippe

@philippe: parser.parse_args()Döndürülen değeri args stackoverflow.com/questions/5262702/…
jfs

@philippe: kodunuzda args = parser.parse_args()zaten olduğu gibi. Sadece yorum yapılan satırı değiştirmeniz gerekir ve sonra değere ile erişebilirsiniz args.simulate.
Felix Kling 11.11.2011
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.