Пояснение с argparse в Python 3.2, пожалуйста - PullRequest
0 голосов
/ 24 марта 2012

привет, я новичок в python, перечитываю документацию и у меня проблемы с argparse

вот код, который я пробую, это простое объяснение для простого мыслящего человека, пожалуйста заранее спасибо

#!/usr/bin/env python
import argparse
from string import ascii_lowercase
from string import ascii_uppercase
from string import digits
from string import punctuation

def options():
    parser = argparse.ArgumentParser(description="Create a list of characters")
    parser.add_argument('-c:')
    if (args.c):# == "-c:":
        if "-c" + ":" + "caps":
            charset = ascii_uppercase
        elif "-c:" + "small":
            charset = ascii_lowercase
        elif "-c:" + "digits":
            charset = digits
        elif "-c:" + "punc":
            charset = punctuation + " "
        elif "-c:" + "space":
            charset = " "
        elif "-c:" + "all":
            charset = ascii_lowercase + ascii_uppercase + digits + punctuation + space
        else:
            print("when using -c you must include an option! (caps, small, digits, punc, space, all)")

def filename():
    filename = open('C:\\Users\\MSec\\Desktop\\WordLists\\'+sys.argv[1], 'w')
    return 

if __name__ == "__main__":
    filename()
    options()

опять я новичок не совсем понял документацию

Полагаю, пока я нахожусь в этом, есть ли лучший (или более питонский) способ кодирования всех опций вместо многих операторов elif?

спасибо всем

1 Ответ

0 голосов
/ 24 марта 2012

Все ваши утверждения if всегда верны.

if "-c" + ":" + "caps":

Средства

if "-c:caps":

Строка "-c: caps" не ложна. То же самое относится и к остальным аналогичным операторам if.

Вы, вероятно, имеете в виду

if args.c == 'caps':

И нет, часто нет лучшего способа, чем длинный список элифов. Есть и другие способы, но это самый простой способ написать и понять, а значит, и лучший.

В этом случае, однако, вы можете создать словарь:

CHAR_OPTIONS = {'caps': ascii_uppercase,
                'small': ascii_lowercase,
                etc....
               }

И используйте это так:

charset = CHAR_OPTIONS[args.c]
...