Hier ist eine Methode, keine Bibliothek, die für mich zu funktionieren scheint.
Die Ziele hier sind, kurz und bündig zu sein, jedes Argument in einer einzigen Zeile zu parsen, die Argumente für die Lesbarkeit aufzureihen, der Code ist einfach und hängt nicht von irgendwelchen speziellen Modulen ab (nur os + sys), warnt vor fehlenden oder unbekannten Argumenten, verwendet eine einfache for/range()-Schleife, und funktioniert in Python 2.x und 3.x
Gezeigt werden zwei Toggle-Flags (-d, -v) und zwei durch Argumente gesteuerte Werte (-i xxx und -o xxx).
import os,sys
def HelpAndExit():
print("<<your help output goes here>>")
sys.exit(1)
def Fatal(msg):
sys.stderr.write("%s: %s\n" % (os.path.basename(sys.argv[0]), msg))
sys.exit(1)
def NextArg(i):
'''Return the next command line argument (if there is one)'''
if ((i+1) >= len(sys.argv)):
Fatal("'%s' expected an argument" % sys.argv[i])
return(1, sys.argv[i+1])
### MAIN
if __name__=='__main__':
verbose = 0
debug = 0
infile = "infile"
outfile = "outfile"
# Parse command line
skip = 0
for i in range(1, len(sys.argv)):
if not skip:
if sys.argv[i][:2] == "-d": debug ^= 1
elif sys.argv[i][:2] == "-v": verbose ^= 1
elif sys.argv[i][:2] == "-i": (skip,infile) = NextArg(i)
elif sys.argv[i][:2] == "-o": (skip,outfile) = NextArg(i)
elif sys.argv[i][:2] == "-h": HelpAndExit()
elif sys.argv[i][:1] == "-": Fatal("'%s' unknown argument" % sys.argv[i])
else: Fatal("'%s' unexpected" % sys.argv[i])
else: skip = 0
print("%d,%d,%s,%s" % (debug,verbose,infile,outfile))
Das Ziel von NextArg() ist es, das nächste Argument zurückzugeben und dabei auf fehlende Daten zu prüfen. Mit 'skip' wird die Schleife übersprungen, wenn NextArg() verwendet wird, so dass sich das Parsen der Flagge auf Einzeiler beschränkt.