параметры командной строки groking в скрипте python - PullRequest
3 голосов
/ 21 декабря 2011

Я относительно новичок в питоне.Я хочу написать скрипт и передать ему параметры следующим образом:

myscript.py --arg1=hello --arg2=world

В скрипте я хочу получить доступ к аргументам arg1 и arg2.Может кто-нибудь объяснить, как получить доступ к параметрам командной строки таким образом?

Ответы [ 4 ]

5 голосов
/ 21 декабря 2011

Argparse является частью стандартной библиотеки (начиная с версий 2.7 и 3.2). Это модуль, который я использую для обработки всего моего анализа командной строки, хотя есть также optparse (который сейчас устарел) и getopt .

Ниже приведен простой пример использования argparse:

import sys, argparse

def main(argv=None):

    if argv is None:
        argv=sys.argv[1:]

    p = argparse.ArgumentParser(description="Example of using argparse")

    p.add_argument('--arg1', action='store', default='hello', help="first word")
    p.add_argument('--arg2', action='store', default='world', help="second word")

    # Parse command line arguments
    args = p.parse_args(argv)

    print args.arg1, args.arg2

    return 0

if __name__=="__main__":
    sys.exit(main(sys.argv[1:]))

Редактировать : обратите внимание, что использование начального '-' в вызовах add_arguments делает arg1 и arg2 необязательными аргументами, поэтому я указал значения по умолчанию. Если вы хотите, чтобы в программе требовалось два аргумента, удалите эти два ведущих переноса, и они станут обязательными аргументами, и вам не понадобится опция default=.... (Строго говоря, вам также не нужен параметр action='store', так как store является действием по умолчанию).

2 голосов
/ 21 декабря 2011

http://docs.python.org/library/argparse.html#module-argparse

простой пример может помочь

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print args.accumulate(args.integers)
1 голос
/ 21 декабря 2011

Python предоставляет 3 различных способа синтаксического анализа аргументов командной строки, кроме тех, которые вы пишете сами, используя необработанный доступ к списку параметров.

http://docs.python.org/dev/whatsnew/2.7.html#pep-389-the-argparse-module-for-parsing-command-lines

Модуль argparse длясинтаксический анализ аргументов командной строки был добавлен в качестве более мощной замены для модуля optparse.

Это означает, что Python теперь поддерживает три разных модуля для анализа аргументов командной строки: getopt, optparse и argparse.Модуль getopt очень похож на функцию getopt () библиотеки C, поэтому он остается полезным, если вы пишете прототип Python, который в конечном итоге будет переписан на C. optparse становится излишним, но планов по его удалению нет, поскольку существует много сценариев.все еще использую его, и нет никакого автоматизированного способа обновить эти сценарии.(Приведение API argparse в соответствие с интерфейсом optparse обсуждалось, но было отклонено как слишком грязное и сложное.)

Короче говоря, если вы пишете новый скрипт и вам не нужно беспокоиться о совместимости с более ранними версиямиPython, используйте argparse вместо optparse.

1 голос
/ 21 декабря 2011

Проверьте модуль argparse , входящий в стандартную библиотеку. Это делает этот материал легким, как только вы к нему привыкли, и это очень надежно. Вот учебник . Рекомендуется использовать это, а не модули optparse или getopt.

Если вы не хотите использовать модуль, но по-прежнему хотите получить доступ к аргументам, проверьте модуль sys . Вам захочется взглянуть на sys.argv.

...