Вот метод, а не библиотека, которая, кажется, работает для меня.
Цели здесь должны быть краткими, каждый аргумент анализируется одной строкой, аргументы выстраиваются для удобства чтения, код прост и не зависит от каких-либо специальных модулей (только os + sys), предупреждает об отсутствии или Изящные неизвестные аргументы, используйте простой цикл for / range () и работают через python 2.x и 3.x
Показаны два переключателя (-d, -v) и два значения, управляемых аргументами (-i xxx и -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))
Целью NextArg () является возвращение следующего аргумента при проверке отсутствующих данных, а 'skip' пропускает цикл, когда используется NextArg (), сохраняя при этом флаг, разбирающий до одной строки.