Как использовать getopt / OPTARG в Python? Как сдвинуть аргументы, если дано слишком много аргументов (9)? - PullRequest
25 голосов
/ 17 июня 2011

Как использовать getopt / optarg в Python?

Ответы [ 3 ]

47 голосов
/ 17 июня 2011

Это пример того, как я это делаю, я обычно использую один и тот же базовый шаблон:

import sys
import getopt

try:
    opts, args = getopt.getopt(sys.argv[1:], 'm:p:h', ['miner=', 'params=', 'help'])
except getopt.GetoptError:
    usage()
    sys.exit(2)

for opt, arg in opts:
    if opt in ('-h', '--help'):
        usage()
        sys.exit(2)
    elif opt in ('-m', '--miner'):
        miner_name = arg
    elif opt in ('-p', '--params'):
        params = arg
    else:
        usage()
        sys.exit(2)

Не думаю, что есть предел в 9 параметров.

13 голосов
/ 17 июня 2011

Поиск в Google помог бы.Посмотрите на модули getopt и 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)

Затем запустите его, как и ожидалось:

$ prog.py -h
usage: prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
 N           an integer for the accumulator

optional arguments:
 -h, --help  show this help message and exit
 --sum       sum the integers (default: find the max)

При запуске с соответствующими аргументами он выводит либо сумму, либо максимум целых чисел командной строки:

$ prog.py 1 2 3 4
4

$ prog.py 1 2 3 4 --sum
10

Это прямо из стандартной библиотеки.

4 голосов
/ 17 июня 2011

Вы пробовали читать документы по питону для модуля getopt (http://docs.python.org/library/getopt.html?highlight=getopt#module-getopt)?). Это простой пример использования getopt. Что вы подразумеваете под аргументами сдвига? Если вы хотите проверить что пользователь не использует более 9 аргументов, вы можете проверить длину списка sys.argv, который содержит все параметры / аргументы, переданные в скрипт. Первый элемент - это имя скрипта, который вызывается, поэтому длина всегда не меньше 1. Вы можете сделать что-то вроде:

if len(sys.argv) > 10
    print('Too many arguments.')
...