Argparse可选的位置参数?

发布于 2021-01-29 15:00:14

我有一个脚本,打算像这样使用: usage: installer.py dir [-h] [-v]

dir 是一个位置参数,其定义如下:

parser.add_argument('dir', default=os.getcwd())

我希望它dir是可选的:未指定时,它应该只是cwd

不幸的是,当我不指定dir参数时,我得到了Error: Too few arguments

关注者
0
被浏览
115
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用nargs='?'(或nargs='*'如果您需要多个目录)

    parser.add_argument('dir', nargs='?', default=os.getcwd())
    

    扩展示例:

    >>> import os, argparse
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('-v', action='store_true')
    _StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
    >>> parser.add_argument('dir', nargs='?', default=os.getcwd())
    _StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
    >>> parser.parse_args('somedir -v'.split())
    Namespace(dir='somedir', v=True)
    >>> parser.parse_args('-v'.split())
    Namespace(dir='/home/vinay', v=True)
    >>> parser.parse_args(''.split())
    Namespace(dir='/home/vinay', v=False)
    >>> parser.parse_args(['somedir'])
    Namespace(dir='somedir', v=False)
    >>> parser.parse_args('somedir -h -v'.split())
    usage: [-h] [-v] [dir]
    
    positional arguments:
      dir
    
    optional arguments:
      -h, --help  show this help message and exit
      -v
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看