1

我需要识别是单独给出参数还是带有可选字符串或两者都没有

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 --argoptions.arg 仍然存在None。识别 --arg 的唯一方法是运行它./prog.py --arg=,这对我来说是个问题。

4

2 回答 2

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')
于 2013-04-16T15:38:08.047 回答
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())
于 2013-04-16T15:37:30.170 回答