Как ответили другие, 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:
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 ()