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