Както други отговориха, optparse е най-добрият вариант, но ако просто искате бърз код, опитайте нещо подобно:
import sys, re
first_re = re.compile(r'^\d{3}$')
if len(sys.argv) > 1:
if first_re.match(sys.argv[1]):
print "Primary argument is : ", sys.argv[1]
else:
raise ValueError("First argument should be ...")
args = sys.argv[2:]
else:
args = ()
# ... anywhere in code ...
if 'debug' in args:
print 'debug flag'
if 'xls' in args:
print 'xls flag'
РЕДАКТИРАНЕ: Ето пример за optparse, защото толкова много хора отговарят на optparse, без наистина да обяснят защо или да обяснят какво трябва да промените, за да работи.
Основната причина да използвате optparse е, че ви дава повече гъвкавост за разширяване по-късно и ви дава повече гъвкавост на командния ред. С други думи, вашите опции могат да се показват в произволен ред и съобщенията за използване се генерират автоматично. Въпреки това, за да работи с optparse, трябва да промените спецификациите си, за да поставите '-' или '--' пред незадължителните аргументи и трябва да позволите на всички аргументи да бъдат в произволен ред.
Ето един пример за използване на optparse:
import sys, re, optparse
first_re = re.compile(r'^\d{3}$')
parser = optparse.OptionParser()
parser.set_defaults(debug=False,xls=False)
parser.add_option('--debug', action='store_true', dest='debug')
parser.add_option('--xls', action='store_true', dest='xls')
(options, args) = parser.parse_args()
if len(args) == 1:
if first_re.match(args[0]):
print "Primary argument is : ", args[0]
else:
raise ValueError("First argument should be ...")
elif len(args) > 1:
raise ValueError("Too many command line arguments")
if options.debug:
print 'debug flag'
if options.xls:
print 'xls flag'
Разликите тук с optparse и вашите спецификации са, че сега можете да имате командни редове като:
python script.py --debug --xls 001
и можете лесно да добавяте нови опции, като извикате parser.add_option()
person
Van Gale
schedule
20.02.2009