Python argparse store_true并在一个参数中存储可选选项

时间:2013-04-16 15:31:48

标签: python optional-parameters argparse

我需要识别是单独使用参数还是使用可选字符串或不使用

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=运行,这对我来说是个问题。

2 个答案:

答案 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())