Python argparse: varsayılan değer veya belirtilen değer


174

Yalnızca bayrak belirtilmemiş bir değer varsa, ancak kullanıcı bir değer belirtiyorsa varsayılan yerine kullanıcı tarafından belirtilen bir değeri depolamak için bir değere varsayılan olacak isteğe bağlı bir bağımsız değişken istiyorum. Bunun için zaten bir eylem var mı?

Bir örnek:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

Bir eylem oluşturabilirim, ancak bunu yapmanın mevcut bir yolu olup olmadığını görmek istedim.

Yanıtlar:


275
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' 0 veya 1 argüman anlamına gelir
  • const=1 0 bağımsız değişken olduğunda varsayılanı ayarlar
  • type=int argümanı int'e dönüştürür

Hayır belirtilse bile 1 test.pyolarak ayarlamak istiyorsanız , ekleyin . Yani, ileexample--exampledefault=1

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

sonra

% test.py 
Namespace(example=1)

Dizelerle nasıl yapılır? "" (Varsayılan olarak boş dize) ve "" (kullanıcı tarafından girilen boş dize) farklılaşması ile bir ikilem var. Şimdilik kodda varsayılan kullanıyorum ve bazı ops yapmak gerektiğinden, böyle bir şey var self.foo = (args.bar or some_else_source).upper(). Hiçbir nesne AFAIUC üzerinde kırılacak.
0andriy

16

Aslında, defaultargümanı yalnızca add_argumentbu test.pykomut dosyasında olduğu gibi kullanmanız gerekir :

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

Detaylar burada .


7

Arasındaki fark:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

ve

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

böylece:

myscript.py => hata ayıklama ilk durumda 7 (varsayılan olarak) ve ikinci durumda "Hiçbiri"

myscript.py --debug => hata ayıklama her durumda 1'dir

myscript.py --debug 2 => hata ayıklama her durumda 2'dir

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.