Каноническим решением в стандартной библиотеке является argparse
( docs ):
Вот пример:
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
args = parser.parse_args()
argparse
поддерживает (среди прочего) :
Мне нравится getopt из stdlib, например:
try:
opts, args = getopt.getopt(sys.argv[1:], 'h', ['help'])
except getopt.GetoptError, err:
usage(err)
for opt, arg in opts:
if opt in ('-h', '--help'):
usage()
if len(args) != 1:
usage("specify thing...")
В последнее время я оборачивал что-то похожее на это, чтобы сделать вещи менее подробными (например, сделать "-h" неявным).
Один из способов сделать это - использовать sys.argv
. Это напечатает имя сценария в качестве первого аргумента и все остальные параметры, которые вы ему передадите.
import sys
for arg in sys.argv:
print arg
Существует также argparse
модуль stdlib («улучшение» модуля stdlib optparse
). Пример из введения в argparse :
# script.py
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'integers', metavar='int', type=int, choices=range(10),
nargs='+', help='an integer in the range 0..9')
parser.add_argument(
'--sum', dest='accumulate', action='store_const', const=sum,
default=max, help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
Использование:
$ script.py 1 2 3 4
4
$ script.py --sum 1 2 3 4
10
import sys
print("\n".join(sys.argv))
sys.argv
- это список, содержащий все аргументы, переданные сценарию на командная строка.
Обычно
import sys
print(sys.argv[1:])
Я сам использую optparse, но мне очень нравится направление, в котором Саймон Уиллисон принимает недавно представленный optfunc библиотека. Он работает следующим образом:
"самоанализ функции определение (включая его аргументы и их значения по умолчанию) и используя чтобы построить командную строку анализатор аргументов. "
Так, например, это определение функции:
def geocode(s, api_key='', geocoder='google', list_geocoders=False):
превращается в этот текст справки optparse:
Options:
-h, --help show this help message and exit
-l, --list-geocoders
-a API_KEY, --api-key=API_KEY
-g GEOCODER, --geocoder=GEOCODER
Just going around evangelizing for argparse which is better for these reasons.. essentially:
(copied from the link)
argparse module can handle positional and optional arguments, while optparse can handle only optional arguments
argparse не догматичен какой у вас интерфейс командной строки должен выглядеть - варианты вроде -file или / файл поддерживаются, как и необходимые параметры. Optparse отказывается поддерживать эти функции, предпочитая чистота важнее практичности
argparse производит больше информативные сообщения об использовании, включая использование командной строки определяется из ваши аргументы и справочные сообщения для как позиционные, так и необязательные аргументы. Модуль optparse требует, чтобы вы написали свое собственное использование строка и не имеет возможности отобразить справка по позиционным аргументам.
argparse поддерживает действие, которое потребляют переменное количество аргументы командной строки, а optparse требует, чтобы точное количество аргументы (например, 1, 2 или 3) должны быть известны заранее
argparse поддерживает парсеры,
отправка в подкоманды, а
optparse требует настройки
allow_interspersed_args
и выполняет
parser dispatch manually
And my personal favorite:
add_argument()
to be specified with simple
callables, while optparse requires
hacking class attributes like
STORE_ACTIONS
or CHECK_METHODS
to get
proper argument checking