2011-12-19 1 views
1

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

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

ответ

6

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

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

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

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

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

или

script.py read some_file.txt -f 

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

0

если вы используете 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') 
Смежные вопросы