Как читать / обрабатывать аргументы командной строки?

[g1] Вы можете сделать это как этот пример, если я только хочу поймать один раз букву минус a в строке, и это можно проверить с помощью myRegex.IsMatch () [/g1] [g2] ^ [^ e] [g0] [е] {1} [^ е] [/g0] $ [/g2]
562
задан martineau 5 September 2017 в 00:27
поделиться

7 ответов

Каноническим решением в стандартной библиотеке является argparse ( docs ):

Вот пример:

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
                    help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
                    action="store_false", dest="verbose", default=True,
                    help="don't print status messages to stdout")

args = parser.parse_args()

argparse поддерживает (среди прочего) :

  • Несколько вариантов в любом порядке.
  • Короткие и длинные варианты.
  • Значения по умолчанию.
  • Создание справочного сообщения по использованию.
432
ответ дан 22 November 2019 в 22:01
поделиться

Мне нравится getopt из stdlib, например:

try:
    opts, args = getopt.getopt(sys.argv[1:], 'h', ['help'])
except getopt.GetoptError, err: 
    usage(err)

for opt, arg in opts:
    if opt in ('-h', '--help'): 
        usage()

if len(args) != 1:
    usage("specify thing...")

В последнее время я оборачивал что-то похожее на это, чтобы сделать вещи менее подробными (например, сделать "-h" неявным).

8
ответ дан 22 November 2019 в 22:01
поделиться

Один из способов сделать это - использовать sys.argv . Это напечатает имя сценария в качестве первого аргумента и все остальные параметры, которые вы ему передадите.

import sys

for arg in sys.argv:
    print arg
49
ответ дан 22 November 2019 в 22:01
поделиться

Существует также argparse модуль stdlib («улучшение» модуля stdlib optparse ). Пример из введения в argparse :

# script.py
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'integers', metavar='int', type=int, choices=range(10),
         nargs='+', help='an integer in the range 0..9')
    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))

Использование:

$ script.py 1 2 3 4
4

$ script.py --sum 1 2 3 4
10
67
ответ дан 22 November 2019 в 22:01
поделиться
import sys

print("\n".join(sys.argv))

sys.argv - это список, содержащий все аргументы, переданные сценарию на командная строка.

Обычно

import sys
print(sys.argv[1:])
525
ответ дан 22 November 2019 в 22:01
поделиться

Я сам использую optparse, но мне очень нравится направление, в котором Саймон Уиллисон принимает недавно представленный optfunc библиотека. Он работает следующим образом:

"самоанализ функции определение (включая его аргументы и их значения по умолчанию) и используя чтобы построить командную строку анализатор аргументов. "

Так, например, это определение функции:

def geocode(s, api_key='', geocoder='google', list_geocoders=False):

превращается в этот текст справки optparse:

    Options:
      -h, --help            show this help message and exit
      -l, --list-geocoders
      -a API_KEY, --api-key=API_KEY
      -g GEOCODER, --geocoder=GEOCODER
19
ответ дан 22 November 2019 в 22:01
поделиться

Just going around evangelizing for argparse which is better for these reasons.. essentially:

(copied from the link)

  • argparse module can handle positional and optional arguments, while optparse can handle only optional arguments

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

  • argparse производит больше информативные сообщения об использовании, включая использование командной строки определяется из ваши аргументы и справочные сообщения для как позиционные, так и необязательные аргументы. Модуль optparse требует, чтобы вы написали свое собственное использование строка и не имеет возможности отобразить справка по позиционным аргументам.

  • argparse поддерживает действие, которое потребляют переменное количество аргументы командной строки, а optparse требует, чтобы точное количество аргументы (например, 1, 2 или 3) должны быть известны заранее

  • argparse поддерживает парсеры, отправка в подкоманды, а optparse требует настройки allow_interspersed_args и выполняет parser dispatch manually

And my personal favorite:

  • argparse allows the type and action parameters to add_argument() to be specified with simple callables, while optparse requires hacking class attributes like STORE_ACTIONS or CHECK_METHODS to get proper argument checking
126
ответ дан 22 November 2019 в 22:01
поделиться
Другие вопросы по тегам:

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