python 参数有无值,指定与否
python argument with or without value, specified or not
场景如下:
我需要实现一个允许两者的命令行参数系统
-p <value>
和
-p
(没有给出 -p 的值)
有什么方法可以使用 argparse 实现这个,还是我必须手动解析 sys.argv?
非常感谢!!!
如果未指定选项(或未指定参数),这会将 args.param 设置为 None
,否则设置为指定值
import argparse
UNSPECIFIED = object()
parser = argparse.ArgumentParser()
parser.add_argument('-p', action='store', dest='param', default=UNSPECIFIED, nargs='?')
args = parser.parse_args()
if args.param == UNSPECIFIED:
print("Param unspecified")
else:
print(args.param)
你需要的是三种状态,不在场、在场、有价值在场。
argparse 模块至少提供了两种简单的方法。
最简单,最灵活的,只需要添加action='store'和nargs='*' .
#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', action='store', nargs='*')
args = parser.parse_args()
if args.p is not None:
print( '-p present' )
else:
print( '-p not present' )
print( '-p value', args.p )
这是此方法的输出结果:
# ./testpar.py
-p not present
-p value None
# ./testpar.py -p
-p present
-p value []
# ./testpar.py -p something
-p present
-p value ['something']
# ./testpar.py -p something anotherthing
-p present
-p value ['something', 'anotherthing']
对于第二种方法,可以为三种状态中的第二种设置具体的值,const=somevalue和nargs='?'。此方法仅支持一个值,'const' 的值必须是用户输入的无效值。
#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', action='store', const='NoValue', nargs='?')
args = parser.parse_args()
if args.p:
print( '-p present' )
else:
print( '-p not present' )
print( '-p value', args.p )
这是三种情况的输出,
# ./testpar.py
-p not present
-p value None
# ./testpar.py -p
-p present
-p value NoValue
# ./testpar.py -p something
-p present
-p value something
场景如下:
我需要实现一个允许两者的命令行参数系统
-p <value>
和
-p
(没有给出 -p 的值)
有什么方法可以使用 argparse 实现这个,还是我必须手动解析 sys.argv?
非常感谢!!!
如果未指定选项(或未指定参数),这会将 args.param 设置为 None
,否则设置为指定值
import argparse
UNSPECIFIED = object()
parser = argparse.ArgumentParser()
parser.add_argument('-p', action='store', dest='param', default=UNSPECIFIED, nargs='?')
args = parser.parse_args()
if args.param == UNSPECIFIED:
print("Param unspecified")
else:
print(args.param)
你需要的是三种状态,不在场、在场、有价值在场。
argparse 模块至少提供了两种简单的方法。
最简单,最灵活的,只需要添加action='store'和nargs='*' .
#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', action='store', nargs='*')
args = parser.parse_args()
if args.p is not None:
print( '-p present' )
else:
print( '-p not present' )
print( '-p value', args.p )
这是此方法的输出结果:
# ./testpar.py
-p not present
-p value None
# ./testpar.py -p
-p present
-p value []
# ./testpar.py -p something
-p present
-p value ['something']
# ./testpar.py -p something anotherthing
-p present
-p value ['something', 'anotherthing']
对于第二种方法,可以为三种状态中的第二种设置具体的值,const=somevalue和nargs='?'。此方法仅支持一个值,'const' 的值必须是用户输入的无效值。
#!/usr/bin/python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', action='store', const='NoValue', nargs='?')
args = parser.parse_args()
if args.p:
print( '-p present' )
else:
print( '-p not present' )
print( '-p value', args.p )
这是三种情况的输出,
# ./testpar.py
-p not present
-p value None
# ./testpar.py -p
-p present
-p value NoValue
# ./testpar.py -p something
-p present
-p value something