Python argparse:nargs ='?' 和可选参数
  假设我有一个名为readfile.py的简单程序,它使用Python的argparse支持命令行参数。 
  该程序从位置参数input指定的文件读取。  没有指定更多的参数,这个程序并不是很令人兴奋。  它只是从input读取并退出。  可选参数--output [OUTPUT_FILE]表示输入文件应写入文件。  OUTPUT_FILE也是可选的。  如果未指定,则输入应写入default.out 。 
我设置了我的参数解析器,如下所示:
parser = argparse.ArgumentParser(description='Read from a file')
parser.add_argument(
    'input',
    help='file to read from')
parser.add_argument(
    '--output',
    nargs='?',
    const='default.out',
    default=None,
    help="""write file to %(metavar)s. If %(metavar)s isn't
         specified, write file to %(const)s.""",
    metavar='OUTPUT_FILE')
args = parser.parse_args()
return args.file, args.output_file
  注意我使用default=None所以如果--ouput没有出现在命令行上,我可以用None来检测它的缺失。 
其中给出了这样的使用签名:
usage: readfile.py [-h] [--output [OUTPUT_FILE]] input
如果我运行,这将处理参数
python readfile.py input.in --output somefile.out
要么
python readfile.py --output somefile.out input
  如果我运行它将output设置为default.out 
python readfile.py input.in --output
但如果我跑
python readfile.py --output input.in
  它抱怨说争论太少。  我认为argparse对于解释这种模式已经足够“聪明”了,将input设置为input.in并output到default.out 。  生成的用法甚至表明了这一点。 
我错过了什么吗?
  不,它不会承认这一点。  你在最后一个例子中明确地将input.in --output给--output 。 
  我会建议你翻转default和const参数。  你希望默认是default.out,所以它应该是default='default.out' 。  对于具有空--output参数的情况, const可以被设置为其他值。 
  这样,除非要更改默认值,否则不必添加--output参数,并且如果要输出到stdout ,则可以使用空的--output参数。 
您可以通过“ - ”标记任何选项的结束。 例如:
python readfile.py --output -- input
具有预期的效果。 但是,要求 - 输出要求并允许:
python readfile.py --output - input
可能更干净。
链接地址: http://www.djcxy.com/p/28553.html