我需要识别是单独使用参数还是使用可选字符串或不使用
parser.add_argument(???)
options = parser.parse_args()
所以
./prog.py --arg
应将''
存储到options.arg,
./prog.py --arg=lol
将'lol'
存储到options.arg和
./prog.py
将options.arg保留为None
现在我有:
parser.add_argument("--arg", nargs="?",type=str,dest="arg")
但当我将myprogram作为./prog.py --arg
时运行时,options.arg仍为None
。识别--arg的唯一方法是将其作为./prog.py --arg=
运行,这对我来说是个问题。
答案 0 :(得分:4)
使用const
关键字:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--arg", nargs="?", type=str, dest="arg", const="")
print(parser.parse_args([]))
print(parser.parse_args(['--arg']))
print(parser.parse_args(['--arg=lol']))
结果
Namespace(arg=None)
Namespace(arg='')
Namespace(arg='lol')
答案 1 :(得分:0)
您可以使用自定义操作执行此操作:
import argparse
parser = argparse.ArgumentParser()
class ArgAction(argparse.Action):
def __call__(self,parser,namespace,values,option_string=None):
if values:
setattr(namespace,self.dest,values)
else:
setattr(namespace,self.dest,'')
parser.add_argument("--arg",nargs='?',action=ArgAction,dest="arg")
print parser.parse_args("--arg".split())
print parser.parse_args("--arg=foo".split())