2012-03-23 11 views
0

hallo neue IM zu Python und wurde in der Dokumentation zu lesen und haben Probleme mit argparseKlärung mit argparse in Python 3.2 bitte

hier ist der Code ich ihm onsimple Erklärung für eine simple minded Person versuch bitte Dank im Voraus

#!/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() 

wieder im neuen nur knapp sein Ziel ganz verstehen, die Dokumentation

ich denke, während im bei der es ein besser (oder mehr pythonic) Weg, um alle Optionen statt viele elif sta zu codieren Tements?

danke alle

Antwort

0

Alle Ihre if-Aussagen sind immer wahr.

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

Means

if "-c:caps": 

Die Zeichenfolge "-c: caps" ist nicht falsch. Das Gleiche gilt für den Rest der ähnlichen if-Anweisungen.

Sie meinen wahrscheinlich

if args.c == 'caps': 

Und nein, gibt es oft keine bessere Art und Weise, dass eine lange Liste von elifs. Es gibt andere Wege, aber das ist am einfachsten zu schreiben und zu verstehen, und daher das Beste.

In diesem Fall müssen Sie jedoch ein Wörterbuch machen: es

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

Und verwenden Sie wie folgt:

charset = CHAR_OPTIONS[args.c] 
+0

Dank, dass es gibt einen globalen Namen args nicht definiert Sinn aber jetzt macht aber wenn es in def-Optionen so verwendet wird, wie es dosent ist, was es zu einer lokalen Variable macht? –

+0

@learn_What: Nein, es gibt das "jetzt" nicht zurück. Ihr Beispiel tat das auch, ich nahm an, dass Sie beim Kopieren einen Fehler gemacht haben. Ihr Beispiel vergisst, tatsächlich parser.parse() aufzurufen. Was Sie tun müssen, ist aufzuhören, eine Menge Code zu schreiben, der nicht funktioniert, und dann zu versuchen, es zu arbeiten. Schreiben Sie stattdessen nur ein wenig Code nach dem anderen und machen Sie das kleine bisschen Code, und erweitern Sie es dann. An diesem Punkt sollten Sie von vorn beginnen und wie eine, zwei oder drei Zeilen Code gleichzeitig schreiben und sicherstellen, dass diese Zeilen funktionieren, und dann weitere Zeilen nach und nach hinzufügen. Dann stellen Sie Fragen von Ihnen haben Probleme. –