Обяснение за поведението на модула на argparse python: Откъде идват главните заместители?

Опитвам се да напиша интерфейс на командния ред (за първи път) и след като прочетох за argparse, optparse и getopt избрах argparse поради няколко препоръки тук в SO и другаде в мрежата. Адаптирайки малко от съветите на г-н ван Росъм закачих моя първи интерфейс на командния ред като този:

def main(argv=None):
    if argv is None:
        argv = sys.argv
    desc = u'some description'
    parser = argparse.ArgumentParser(description=desc)

    parser.add_argument('-s', '--search', help='Search for someone.')
    parser.add_argument('-c', '--do_something_else', help='Do something else.')

    args = parser.parse_args()
    print args

if __name__ == '__main__':
    sys.exit(main())

Извършването на python myscript.py -h води до:

usage: dblp.py [-h] [-s SEARCH] [-c DO_SOMETHING_ELSE]

some description

optional arguments:
  -h, --help            show this help message and exit
  -s SEARCH, --search SEARCH
                        Search for someone.
  -c DO_SOMETHING_ELSE, --do_something_else DO_SOMETHING_ELSE
                        Do something else.

Така че първият ми въпрос е: Защо SEARCH и DO_SOMETHING_ELSE са написани с ГЛАВНИ БУКВИ? Вторият въпрос ще бъде: Нарушавам ли някакви стандарти? Има ли по-добър начин (или хубав пример от реалния свят, от който мога да се уча) как да изградя чисти и полезни интерфейси на командния ред с Python? И има ли клопки, които човек трябва да избягва , при писане на cmd интерфейси?


person Aufwind    schedule 18.07.2011    source източник


Отговори (2)


Ето няколко основни ресурса за argparse, които изрових:

Някои слайдове в argparse: http://www.slideshare.net/tisto/argparse-python-command-line-parser

Малък пример за argparse: http://www.rutherfurd.net/tag/argparse/

Ето пример за argparse от реалния свят: https://github.com/harijay/xtaltools/blob/e683fcef6a5ad7394b87382e58d4dce32a85585b/maskconvert.py

Що се отнася до избягването на клопки, ето една добре изглеждаща обвивка за argparse за намаляване на шаблонния код, който трябва да пишете за някои често срещани случаи на употреба: http://travelingfrontiers.wordpress.com/2010/11/03/simple-python-argparse-wrapper/

person agf    schedule 18.07.2011

Елементите с главна буква са само заместващи стойности; те са взети от дестинацията на опцията. Можете да посочите алтернативни заместители чрез параметъра metavar= на add_argument:

http://docs.python.org/dev/library/argparse.html#metavar

person Amber    schedule 18.07.2011