SORU
21 ŞUBAT 2013, PERŞEMBE


ayrıştırma argparse boolean değerleri

Argparse komut satırı boolean değişken olarak yazılı ayrıştırmak için kullanmak istiyorum "" ya da "foo Yanlış". ----foo Doğru Örneğin:

my_program --my_boolean_flag False

Ancak, aşağıdaki test kodunu istiyorum ne yapmaz:

import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)

Ne yazık ki, parsed_args.my_bool True olarak değerlendirir. Bu cmd_line bool("") False evalutates beri şaşırtıcı olan ["--my_bool", ""], ben değişiklik bile böyledir.

Nasıl "False", "F" ve onların ayrıştırmak için küçük harf False olmak türevleri argparse alabilir miyim?

CEVAP
21 ŞUBAT 2013, PERŞEMBE


Daha kurallı bunu yapmanın yolu üzerinden bence

command --feature

ve

command --no-feature

argparse güzel bu sürüm destekler:

parser.add_argument('--feature', dest='feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

Eğer gerçekten --arg <True|False> sürümü istiyorsanız tabii ki, ast.literal_eval olarak geçirmek "tip", ya da bir kullanıcı tanımlı işlevi ...

def t_or_f(arg):
    ua = str(arg).upper()
    if ua == 'TRUE'[:len(ua)]:
       return True
    elif ua == 'FALSE'[:len(ua)]:
       return False
    else:
       pass  #error condition maybe?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008