Я не могу передать аргументы ошибка: нераспознанные аргументы: Argparse Python3 - PullRequest
0 голосов
/ 10 сентября 2018

Я использую python 3.6 и пытаюсь создать программу, требующую аргументов, но я не могу ее использовать, потому что не могу передать аргументы. Другой вопрос: я не могу понять параметр dest; это создать переменную с таким именем?

#!/usr/bin/env python3
import argparse
import subprocess

parser = argparse.ArgumentParser()
parser.add_argument('-m', '--mac',
                    help='Introduce your new MAC' +
                    'use random as value if you want to have a random mac',
                    action="store_true", required=True)
parser.add_argument('-i', '--interface',
                    help='The interface that the MAC will be changed',
                    action="store", required=True)
args = parser.parse_args()

print(args.mac + args.interface)

Я получаю эту ошибку, когда пытаюсь ее использовать (я использую привет и пока в качестве примера)

> python  '.\test.py' -m hi -i bye
usage: test.py [-h] -m -i INTERFACE
test.py: error: unrecognized arguments: hi

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Как правильно указывает @ Ответ Давита , проблема связана с action="store_true". Встроенное действие 'store_true' имеет автоматическое значение по умолчанию False и устанавливает значение аргумента в пространстве имен на True, если флаг найден. Он не принимает никаких аргументов для флага.

Если вы хотите принять аргумент для флага, вы должны использовать действие, подобное action="store".

Если вы хотите проверить ошибку или преобразовать аргумент на месте, передайте type в add_argument. Вы можете преобразовать в тип типа int или просто проверить свой аргумент. Например, у вас может быть функция mac_address, которая будет анализировать строку аргумента для более легко управляемого объекта или выдавать ошибку, если формат не соответствует. Тогда вы могли бы сделать type=mac_address.

Аргумент dest просто предоставляет имя выходного атрибута в пространстве имен, которому нужно присвоить значение. Обычно это берется из длинного имени флага или позиционного аргумента. Таким образом, для --mac выходная переменная будет иметь значение по умолчанию mac, а для --interface это будет по умолчанию interface. Иногда вы хотите использовать альтернативную выходную переменную.

0 голосов
/ 10 сентября 2018

Это сработало для меня:

parser.add_argument('-m', '--mac',
                help='Introduce your new MAC' +
                'use random as value if you want to have a random mac',
                action="store", required=True

Изменение store_true на store

...