Параметры командной строки с необязательными аргументами в Python - PullRequest
4 голосов
/ 22 сентября 2009

Мне было интересно, есть ли простой способ анализа параметров командной строки, имеющих необязательные аргументы в Python. Например, я хотел бы иметь возможность вызывать скрипт двумя способами:

> script.py --foo
> script.py --foo=bar

Из документации Python Getopt кажется, что я должен выбрать один или другой.

Ответы [ 5 ]

3 голосов
/ 23 сентября 2009

optparse модуль из stdlib не поддерживает его из коробки (и это не должно из-за плохой практики использовать параметры командной строки таким образом).

Как указал @ Кевин Хорн , вы можете использовать модуль argparse (устанавливается через easy_install argparse или просто захватить argparse.py и поместить его в любое место в вашем sys.path) .

Пример

#!/usr/bin/env python
from argparse import ArgumentParser

if __name__ == "__main__":
    parser = ArgumentParser(prog='script.py')
    parser.add_argument('--foo', nargs='?', metavar='bar', default='baz')

    parser.print_usage()    
    for args in ([], ['--foo'], ['--foo', 'bar']):
        print "$ %s %s -> foo=%s" % (
            parser.prog, ' '.join(args).ljust(9), parser.parse_args(args).foo)

выход

usage: script.py [-h] [--foo [bar]]
$ script.py           -> foo=baz
$ script.py --foo     -> foo=None
$ script.py --foo bar -> foo=bar
3 голосов
/ 22 сентября 2009

проверить argparse: http://code.google.com/p/argparse/

особенно опция 'nargs'

3 голосов
/ 22 сентября 2009

Также обратите внимание, что в стандартной библиотеке также есть optparse , более мощный анализатор опций.

2 голосов
/ 22 сентября 2009

В optparse нет опции, позволяющей вам это сделать. Но вы можете расширить его, чтобы сделать это:

http://docs.python.org/library/optparse.html#adding-new-actions

1 голос
/ 22 сентября 2009

Используйте пакет optparse .

...