如何使用argparse(python)处理可选和必需的位置参数

如何使用argparse(python)处理可选和必需的位置参数,python,command-line-arguments,argparse,Python,Command Line Arguments,Argparse,我一直试图在传递了一些参数的情况下执行python脚本。我希望它是这样的: python script.py文件路径 但也要支持这一点 python script.py文件路径1文件路径2 我的实施是: parser = argparse.ArgumentParser() mand = parser.add_argument_group("Mandatory arguments") mand.add_argument("path1", help = "path1") opt = parser.a

我一直试图在传递了一些参数的情况下执行python脚本。我希望它是这样的:

python script.py文件路径

但也要支持这一点

python script.py文件路径1文件路径2

我的实施是:

parser = argparse.ArgumentParser()
mand = parser.add_argument_group("Mandatory arguments")
mand.add_argument("path1", help = "path1")
opt = parser.add_argument_group("Optional arguments")
opt.add_argument("path2", help = "path2")
args = parser.parse_args()
它似乎要求两种论点。有没有人对正确的方法有什么建议?我的一个想法是做两个论证小组;一个具有路径1,另一个具有两个路径,但它仍然同时请求这两个路径

谢谢各位


p.S.Python 2.7

很抱歉回答了一些离题的问题。我更喜欢使用
docopt
,以防您感兴趣

使用
docopt
首先安装docopt:

$ pip install docopt
还有剧本:

"""script.py
Usage:
    script.py <fname>...
"""

if __name__ == "__main__":
    from docopt import docopt
    args = docopt(__doc__)
    print args
”script.py
用法:
script.py。。。
"""
如果名称=“\uuuuu main\uuuuuuuu”:
从docopt导入docopt
args=docopt(文档)
打印参数
您可以这样使用它:

请求使用脚本:

$ python script.py 
Usage:
    script.py <fname>...
$python script.py
用法:
script.py。。。
使用一个文件名调用:

$ python script.py alfa
{'<fname>': ['alfa']}
$python script.py alfa
{'':['alfa']}
与两个名称一起使用:

$ python script.py alfa beta
{'<fname>': ['alfa', 'beta']}
$python script.py alfa beta
{'':['alfa','beta']}
使用替代用法说明: 下面允许一个或两个文件名,但决不能有三个或更多:

"""script.py
Usage:
    script.py <input> [<output>]
"""

if __name__ == "__main__":
    from docopt import docopt
    args = docopt(__doc__)
    print args
”script.py
用法:
script.py[]
"""
如果名称=“\uuuuu main\uuuuuuuu”:
从docopt导入docopt
args=docopt(文档)
打印参数

很抱歉,我的回答有点离题。我更喜欢使用
docopt
,以防您感兴趣

使用
docopt
首先安装docopt:

$ pip install docopt
还有剧本:

"""script.py
Usage:
    script.py <fname>...
"""

if __name__ == "__main__":
    from docopt import docopt
    args = docopt(__doc__)
    print args
”script.py
用法:
script.py。。。
"""
如果名称=“\uuuuu main\uuuuuuuu”:
从docopt导入docopt
args=docopt(文档)
打印参数
您可以这样使用它:

请求使用脚本:

$ python script.py 
Usage:
    script.py <fname>...
$python script.py
用法:
script.py。。。
使用一个文件名调用:

$ python script.py alfa
{'<fname>': ['alfa']}
$python script.py alfa
{'':['alfa']}
与两个名称一起使用:

$ python script.py alfa beta
{'<fname>': ['alfa', 'beta']}
$python script.py alfa beta
{'':['alfa','beta']}
使用替代用法说明: 下面允许一个或两个文件名,但决不能有三个或更多:

"""script.py
Usage:
    script.py <input> [<output>]
"""

if __name__ == "__main__":
    from docopt import docopt
    args = docopt(__doc__)
    print args
”script.py
用法:
script.py[]
"""
如果名称=“\uuuuu main\uuuuuuuu”:
从docopt导入docopt
args=docopt(文档)
打印参数
使用
nargs=“?”
(使用
argparse
) 请参阅用法字符串:

$ python argscript.py 
usage: argscript.py [-h] path1 [path2]
argscript.py: error: too few arguments
或使用
-h

$ python argscript.py -h
usage: argscript.py [-h] path1 [path2]

optional arguments:
  -h, --help  show this help message and exit

Mandatory arguments:
  path1       path1

Optional arguments:
  path2       path2
并仅使用一个位置参数进行尝试:

$ python argscript.py alfa
Namespace(path1='alfa', path2=None)
还有两个:

$ python argscript.py alfa beta
Namespace(path1='alfa', path2='beta')
使用
nargs=“?”
(使用
argparse
) 请参阅用法字符串:

$ python argscript.py 
usage: argscript.py [-h] path1 [path2]
argscript.py: error: too few arguments
或使用
-h

$ python argscript.py -h
usage: argscript.py [-h] path1 [path2]

optional arguments:
  -h, --help  show this help message and exit

Mandatory arguments:
  path1       path1

Optional arguments:
  path2       path2
并仅使用一个位置参数进行尝试:

$ python argscript.py alfa
Namespace(path1='alfa', path2=None)
还有两个:

$ python argscript.py alfa beta
Namespace(path1='alfa', path2='beta')

没关系,只要它能给帖子增加知识。但是我忘了提到一个限制。我无法安装库。(但我将保留它以备将来个人使用)@MayTheSchwartzBeWithYou您的约束已使用argparse隐式包含在
中。顺便说一句,如果您没有root权限,您仍然可以安装到用户方案中(使用
pip install--user
或最佳安装到virtualenv。但这是另一个主题。可能还有其他原因(比如在任何纯Python机器上都可以轻松运行).是的,我知道,但该工具将有100人使用。我必须将其运行到最小依赖项。只要它能为帖子添加知识,就可以了。但是我忘了提到一个限制。我无法安装库。(但我会保留它以备将来个人使用)@可能您的约束被隐式包含在使用argparse的
中。顺便说一句,您没有根权限,您仍然可以安装到用户方案中(使用
pip install--user
或最佳安装到virtualenv中。但这是另一个主题。可能还有其他原因(就像使用纯Python在任何机器上都可以轻松运行一样)。是的,我知道,但该工具将有100人使用。我必须将其运行到最低依赖项。这些参数组只影响
帮助
的显示方式。它们不影响解析。对于位置参数,它是
nargs
参数,确定它需要多少值。它还控制
>用法
display。这些参数组只影响
帮助
的显示方式。它们不影响解析。对于位置参数,是
nargs
参数决定了它需要多少值。它还控制
用法
display.Awesome。谢谢!这样很容易理解。谢谢!用这种方式很容易理解