argparse可以处理多个位置命令行参数吗?

时间:2015-03-17 22:43:16

标签: python command-line-arguments argparse

在我看到的例子中,argparse只处理一个位置命令行参数,以及任意数量的可选命令行参数。所以我想知道它是否可以处理多个位置参数?如果是,它是如何做的以及如何指定命令行参数?感谢。

2 个答案:

答案 0 :(得分:2)

  

所以我想知道它是否可以处理多个位置参数?如果是,它是如何做的以及如何指定命令行参数?

好吧,argparse documentation中的第一个示例处理多个非选项参数。所以这可能是一个很好的起点。

这是一个微不足道的例子;将以下内容放在argtest.py

import argparse


def parse_args():
    p = argparse.ArgumentParser()
    p.add_argument('--option1', '-1')
    p.add_argument('--option2', '-2')
    p.add_argument('commandline1')
    p.add_argument('commandline2')
    return p.parse_args()


if __name__ == '__main__':
    p = parse_args()
    print p

然后:

python argtest.py
usage: argtest.py [-h] [--option1 OPTION1] [--option2 OPTION2]
                  commandline1 commandline2
argtest.py: error: too few arguments

或者:

python argtest.py hello world
Namespace(commandline1='hello', commandline2='world', option1=None, option2=None) 

答案 1 :(得分:1)

是的,

parser = argparse.ArgumentParser(description="my_example")

# these are your positional arguments
parser.add_argument("first", type=int, nargs=1)                                          
parser.add_argument("second", type=str, nargs=1)

# this is your optional one
parser.add_argument("-r", this is an optional argument)

args = parser.parse_args()
parser.print_help()
print args.first args.second  

在命令行上

$ python argtest1.py 5 'c' -r R                                  

输出:

usage: argtest1.py [-h] [-r R] first second                                     

my_example                                                                      

positional arguments:                                                           
  first                                                                         
  second                                                                        

optional arguments:                                                             
 -h, --help  show this help message and exit                                   
 -r R        this is an optional argument                                      

[5] ['c']                     

请注意,您可以将位置参数放在命令行上的可选位置之后:python argtest1.py -r R 5 'c'。你也可以这样做:python argtest1.py 5 -r R 'c'。显然你不能这样做python argtest1.py -r R 'c' 5