我无法传递参数错误:无法识别的参数:Argparse Python3

时间:2018-09-10 02:03:48

标签: python python-3.x argparse

我正在使用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)

尝试使用它时出现此错误(我以hi和bye为例)

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

2 个答案:

答案 0 :(得分:2)

正如@Dawit's answer正确指出的那样,问题出在action="store_true"上。内置action 'store_true'的自动默认值为False,如果找到该标志,则将命名空间中参数的值设置为True。它不接受该标志的任何参数。

如果要接受该标志的参数,则必须使用action="store"之类的操作。

如果要当场进行错误检查或转换参数,请将type传递给add_argument。您可以转换为int之类的类型,也可以只检查您的参数。例如,您可以使用一个函数mac_address来将参数字符串解析为一个更易于管理的对象,或者在格式不匹配时引发错误。然后,您可以做type=mac_address

dest参数仅提供名称空间中输出属性的名称,以将值分配给该属性。通常从标志或位置参数的长名称中获取。因此,对于--mac,输出变量将默认为mac,对于--interface,它将默认为interface。有时您还是想使用其他输出变量。

答案 1 :(得分:1)

这对我有用:

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