如何使 Shell 脚本样式参数在 Python 中通过 argparse 传递
How to make Shell script style arguments passing with argparse in Python
我有一个 python 解析参数,如下所示:
代码:
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
并明显抛出以下错误,因为它希望调用者为第二个参数传递值。
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 ' '
有可能。您可以使用 action="store_true"
属性将参数转换为布尔值(标志)。
parser.add_argument('-myarg2', '--myarg2', dest='myarg2', action="store_true", help='Help yourself')
args = parser.parse_args()
print(args.myarg2) # True if "python myargs.py -myarg2", False if "python myargs.py"
编辑
如果您希望用户能够将可选参数传递给 myarg2
标志,您需要使用 nargs='?'
属性。您还需要定义一个 default
属性,如果不使用该标志将被调用,以及一个 const
属性,如果使用该标志但没有参数将被调用。
parser.add_argument('-myarg2', '--myarg2', dest='myarg2', nargs='?', const="no value", default='no flag', help='Help yourself')
如果你想使用 --myarg 并将其解释为真(否则为假)你需要使用
parser.add_argument("-myarg2", "--myarg2", action="store_true")
我有一个 python 解析参数,如下所示:
代码:
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
并明显抛出以下错误,因为它希望调用者为第二个参数传递值。
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 ' '
有可能。您可以使用 action="store_true"
属性将参数转换为布尔值(标志)。
parser.add_argument('-myarg2', '--myarg2', dest='myarg2', action="store_true", help='Help yourself')
args = parser.parse_args()
print(args.myarg2) # True if "python myargs.py -myarg2", False if "python myargs.py"
编辑
如果您希望用户能够将可选参数传递给 myarg2
标志,您需要使用 nargs='?'
属性。您还需要定义一个 default
属性,如果不使用该标志将被调用,以及一个 const
属性,如果使用该标志但没有参数将被调用。
parser.add_argument('-myarg2', '--myarg2', dest='myarg2', nargs='?', const="no value", default='no flag', help='Help yourself')
如果你想使用 --myarg 并将其解释为真(否则为假)你需要使用
parser.add_argument("-myarg2", "--myarg2", action="store_true")