Скрипт командной строки Python. Два сценария использования. Как реализовать синтаксический анализ аргументов? - PullRequest
1 голос
/ 19 декабря 2011

У меня есть скрипт командной строки python, который можно использовать двумя разными способами.

Первый сценарий выглядит следующим образом:

script.py -max MAX -min MIN -delta DELTA

, где -max и -min - обязательные аргументы, а -delta - необязательный.

Второй сценарий:

script.py some_file.txt -f

, где some_file.txt - обязательный позиционный аргумент, а -f - необязательный.

Как реализовать это, используя любой анализатор аргументов командной строки Python (argparse, optparse, getopt и т. Д.)?

ОБНОВЛЕНИЕ: скрипт делает только одно - очищает сайт.Но это очень долгая по времени операция.В первом случае мы запускаем новый сеанс очистки, а во втором загружаем ранее сохраненный сеанс и продолжаем удаление.

Ответы [ 3 ]

6 голосов
/ 19 декабря 2011

Я бы сделал это следующим образом:

parser = OptionParser()
parser.add_option("-max", dest="max")
parser.add_option("-min", dest="min")
parser.add_option("-delta", dest="delta")
parser.add_option("-f", dest="f_thing", action="store_true")

(options,args) = parser.parse_args()

if not args:
    if not options.max or not options.min:
        parser.error("Please provide a max and min value.")
    else:
        yourfunction(options, args) # without some_file.txt name
else:
        yourfunctions(options, args) # pass the some_file.txt name

Я не уверен, если это 100%, что вы хотите, но я думаю, что этот вопрос слишком близкоЭто дало бы вам представление о том, как ваша цель может быть достигнута.

2 голосов
/ 19 декабря 2011

Эти два случая кажутся мне достаточно разными, чтобы я испытал искушение использовать два отдельных сценария.Если они совместно используют общий код, поместите его в свой собственный модуль и импортируйте его в каждый скрипт.

Если вы хотите использовать один скрипт, почему бы не использовать подпрограмму ?Затем вы вызываете ваш сценарий и явно указываете, какой сценарий вы хотите, например:

script.py calc -max MAX -min MIN -delta DELTA

или

script.py read some_file.txt -f

(где «calc» и «read», конечно, всеимена, которые вы хотите использовать для этих двух функций.)

0 голосов
/ 28 декабря 2011

если вы используете argparse вместо optparse, вы можете указать требуемые аргументы отдельно от необязательных, опуская '-' перед буквой

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('min', help="min value for function")
parser.add_argument('max', help="max value for function")
parser.add_argument('-d','--delta', type=int, help="the delta value")
args = parser.parse_args()

print args

и я могу бежать так:

$ argtest.py -d 10 5 20
Namespace(delta=10, max='20', min='5')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...