С optparse модулем Python, как Вы создаете опцию, которая берет переменное количество аргументов?

GIT=/usr/bin/git                     # STORE THE RELATIVE PATH
# GIT=$(which git)                   # USE THIS COMMAND TO SEARCH FOR THE RELATIVE PATH

if [[ ! -e $GIT ]]; then             # CHECK IF THE FILE EXISTS
    echo "PROGRAM DOES NOT EXIST."
    exit 1                           # EXIT THE PROGRAM IF IT DOES NOT
fi

# DO SOMETHING ...

exit 0                               # EXIT THE PROGRAM IF IT DOES
12
задан FMc 3 July 2010 в 14:38
поделиться

4 ответа

Я считаю, что optparse не поддерживает то, что вам нужно (не напрямую - как вы заметили, вы можете сделать это, если готовы выполнить всю дополнительную работу по обратный звонок! -). Вы также можете сделать это проще всего с помощью стороннего расширения argparse , которое поддерживает переменное количество аргументов (а также добавляет несколько других полезных функций).

Этот URL документирует argparse 's add_argument - передача nargs =' * ' позволяет опции принимать ноль или более аргументов, ' + ' позволяет один или несколько аргументов и т. д.

8
ответ дан 2 December 2019 в 03:32
поделиться

Моя ошибка: только что нашел этот Пример обратного вызова 6 .

10
ответ дан 2 December 2019 в 03:32
поделиться

Не лучше ли вам это сделать?

foo.pl --files a.txt,b.txt,c.txt --verbose
2
ответ дан 2 December 2019 в 03:32
поделиться

Это заняло у меня немного времени, чтобы разобраться, но вы можете использовать действие обратного вызова для своих опций, чтобы это сделать. Посмотрите, как в этом примере я захватываю произвольное количество аргументов для флага «--file».

from optparse import OptionParser,

def cb(option, opt_str, value, parser):
        args=[]
        for arg in parser.rargs:
                if arg[0] != "-":
                        args.append(arg)
                else:
                        del parser.rargs[:len(args)]
                        break
        if getattr(parser.values, option.dest):
                args.extend(getattr(parser.values, option.dest))
        setattr(parser.values, option.dest, args)

parser=OptionParser()
parser.add_option("-q", "--quiet",
        action="store_false", dest="verbose",
        help="be vewwy quiet (I'm hunting wabbits)")
parser.add_option("-f", "--filename",
        action="callback", callback=cb, dest="file")

(options, args) = parser.parse_args()

print options.file
print args

Единственным побочным эффектом является то, что вы получаете свои аргументы в виде списка вместо кортежа. Но это можно легко исправить, для моего конкретного случая использования список желателен.

21
ответ дан 2 December 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: