2013-03-23 42 views
2

我在​​面临的一个问题,当我混合位置参数,可选参数和argparse.REMAINDER混合位置和可选的参数在argparse

parser = argparse.ArgumentParser() 
parser.add_argument('verbose', action="store") 
parser.add_argument('--config', '-c', nargs="?", dest="config_file") 
parser.add_argument('--dry-run', action="store_true", dest="dryrun") 
parser.add_argument('args', nargs=argparse.REMAINDER, action="store") 

采样运行:

python test.py verose="5" --config config.xml graph --dry-run 

预期输出:

verbose = "5" 
config_file = config.xml 
dryrun = True 
args = ['graph'] 

实际产量:

verbose = "5" 
config_file = config.xml 
dryrun = False 
args = ['graph', '--dry-run'] 

我的要求是我verbose-c--config--dry-run作为命令行选项,在命令行提供的任何其他选项应该被存储在列表args无论在命令行的参数出现的顺序的。 请帮我在做错的地方。 还有没有其他更好的命令行解析器的Python?

回答

4

我说你需要的配置是这样的:

parser.add_argument('--verbose', action="store") 
    parser.add_argument('-c', '--config', nargs="?", dest="config_file") 
    parser.add_argument('--dry-run', action="store_true", dest="dryrun") 
    parser.add_argument('args', nargs='*') 

我觉得你特别给了“剩女”的说法告诉argparse模块采取的args中的剩余参数,当找到第一个论点,它不能与其余的匹配。

如果您希望args的参数值为0或更多,请使用'*',如果您希望至少有1个参数使用'+'作为nargs参数。

除此之外,我会推荐argparse documentation,因为有很多可能已经解析所需的类型(如int或文件参数)。 在免费的Aptana Studio中创建CLI-argparse模块为argparse提供了一个很好的包装,其中包含一些已经设置的标准参数(如verbose)。在这种情况下,详细级别应该是整数级别。

+0

我想我的问题是非常愚蠢的!但是非常感谢。你的回答解决了我的问题:) – 2013-03-23 06:09:07

+0

提问是绝不愚蠢的(当然在提问前提供了一点研究成果)。另请参阅我在答案中的其他评论。 – 2013-03-23 06:10:31

相关问题