Скрипт командной строки Python. Два сценария использования. Как реализовать парсинг аргументов?

У меня есть сценарий командной строки 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 и т. Д.)?

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


person clumpter    schedule 19.12.2011    source источник


Ответы (3)


Я бы сделал это так:

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% то, что вы хотите, но я думаю, что этот вопрос слишком близок. Это даст вам некоторое представление о том, как можно достичь вашей цели.

person Gandi    schedule 19.12.2011

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

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

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

or

script.py read some_file.txt -f

(Где 'calc' и 'read' - это, конечно, любые имена, которые вы хотите использовать для этих двух функций.)

person kindall    schedule 19.12.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')
person WRF    schedule 28.12.2011