如何在Python中使用argparse传递Shell脚本样式的参数
我有一个python解析参数,如下所示:如何在Python中使用argparse传递Shell脚本样式的参数,python,python-2.7,argparse,Python,Python 2.7,Argparse,我有一个python解析参数,如下所示: python myargs.py -myarg1 something -myarg2 somethingelse python myargs.py -myarg1 something -myarg2 代码: if __name__ == "__main__": parser = argparse.ArgumentParser(description='Args test') parser.add_argument(
python myargs.py -myarg1 something -myarg2 somethingelse
python myargs.py -myarg1 something -myarg2
代码:
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Args test')
parser.add_argument('-myarg1', '--myarg1', type=str, dest='myarg1', required=True, help='Help yourself')
parser.add_argument('-myarg2', '--myarg2', type=str, dest='myarg2', default=' ', help='Help yourself')
args = parser.parse_args()
print(args.myarg1)
print(args.myarg2)
如果我像下面这样调用脚本,则上面的方法有效:
python myargs.py -myarg1 something -myarg2 somethingelse
python myargs.py -myarg1 something -myarg2
但如果我这样称呼它,它就不起作用了:
python myargs.py -myarg1 something -myarg2 somethingelse
python myargs.py -myarg1 something -myarg2
并抛出下面的错误,因为它期望调用者传递第二个参数的值
usage: myargs.py [-h] -myarg1 MYARG1 [-myarg2 MYARG2]
myargs.py: error: argument -myarg2/--myarg2: expected one argument
问题:我理解python在上面抱怨它的原因。但是,我希望python脚本的用户能够调用第二个参数,只说
-myarg2
或-myarg2
,而不指定类型。就像shell脚本样式一样。是否可以使用argparse
我使用的是python 2.7及更高版本。问题在于调用参数标志时没有值。如果希望值为空字符串,请执行以下操作-
python myargs.py-myarg1 something-myarg2'
问题在于调用参数标志时没有值。如果希望值为空字符串,请执行以下操作-
python myargs.py-myarg1某物-myarg2''
这是可能的。您可以使用action=“store\u true”
属性将参数转换为布尔值(标志)
parser.add_参数('-myarg2','-myarg2',dest='myarg2',action=“store_true”,help='help yourself')
args=parser.parse_args()
打印(args.myarg2)#如果是“python myargs.py-myarg2”,则为True;如果是“python myargs.py”,则为False
编辑
如果希望用户能够将可选参数传递给myarg2
标志,则需要使用nargs='?'
属性。您还需要定义一个default
属性,如果不使用该标志,将调用该属性;如果使用该标志但没有参数,将调用一个const
属性
parser.add_参数('-myarg2','-myarg2',dest='myarg2',nargs='?',const='no value',default='no flag',help='help')
这是可能的。您可以使用action=“store\u true”
属性将参数转换为布尔值(标志)
parser.add_参数('-myarg2','-myarg2',dest='myarg2',action=“store_true”,help='help yourself')
args=parser.parse_args()
打印(args.myarg2)#如果是“python myargs.py-myarg2”,则为True;如果是“python myargs.py”,则为False
编辑
如果希望用户能够将可选参数传递给myarg2
标志,则需要使用nargs='?'
属性。您还需要定义一个default
属性,如果不使用该标志,将调用该属性;如果使用该标志但没有参数,将调用一个const
属性
parser.add_参数('-myarg2','-myarg2',dest='myarg2',nargs='?',const='no value',default='no flag',help='help')
如果要使用--myarg并将其解释为true(否则为false),则需要使用
parser.add_argument("-myarg2", "--myarg2", action="store_true")
如果要使用--myarg并将其解释为true(否则为false),则需要使用
parser.add_argument("-myarg2", "--myarg2", action="store_true")
myarg2的预期值类型是什么?我更新了值类型。两个参数都是字符串类型myarg2的预期值类型是什么?我更新了值类型。它的str。两个参数都是字符串类型。我知道我可以传递“”或“”。它可以工作,但我想避免它我知道我可以通过“”或“”。它是有效的,但我想避免它,但如果她想传递
str
参数,这将导致error@Lior科恩说得对。奇怪的是,python没有给出传递字符串或不传递字符串的方法。但是,如果这是python中的约束,那么我将不得不接受它。只有一个问题。action='store\u false'将其设置为false?如何检查用户是否已传递输入?@AdeleGoldberg的确,action=“store\u false”
将其设置为false,而action=“store\u const”
将其设置为常量属性的值。您可以了解更多信息,但如果她想传递str
参数,则会引发error@Lior科恩说得对。奇怪的是,python没有给出传递字符串或不传递字符串的方法。但是,如果这是python中的约束,那么我将不得不接受它。只有一个问题。action='store\u false'将其设置为false?如何检查用户是否已传递输入?@AdeleGoldberg的确,action=“store\u false”
将其设置为false,而action=“store\u const”
将其设置为常量属性的值。你可以了解更多,但如果她想通过str参数,这将导致引发错误确实,我修改了我的答案以处理此案例,但如果她想通过str参数,这将导致引发错误确实,我修改了我的答案以处理此案例