Python_argparse

版权声明:由于作者水平有限,文中难免有误,欢迎各位业界同仁斧正! https://blog.csdn.net/UserPython/article/details/80933613

简介

argparse是Python的一个命令行解析器

1、创建解析器    ArgumentParser

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

print(parser.print_help())
(venv) E:\文档\Python\PythonTest>python argparseTest.py
usage: my_program [options] usage

help信息前显示的信息———我的argparse命令行参数用法

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

help信息之后显示的信息
None

prog : 脚本文件名,默认为sys.argv[0],用来在help信息中描述程序的名称

usage :描述程序用途的字符串

description :help信息前显示的信息

epilog : help信息之后显示的信息

2、添加参数选项 add_argument

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

 1. name or flags : 参数有两种,可选参数和位置参数

  • positional arguments - 位置参数

        用法是在命令行中不用带“-”就可以用

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("echo")  #位置参数

args = parser.parse_args()

print(args.echo)

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py hahaha
hahaha
  • optional arguments - 可选参数

         用法是在命令行中要使用横杠,其中有两种方式:

             一种是通过一个"-"来指定的短参数,如"-h";

             一种是通过一个"--"来指定的长参数,如"--help";

这两种方式可以同时使用或只用一种

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", "--foo", help = "这是一个f或foo命令的指令")    #可选参数
#该行定义了可选参数-f 或 --foo, 通过解析后,其值保存在args.foo变量中

args = parser.parse_args()

print(args.foo)

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py -f hahaha
hahaha

(venv) E:\文档\Python\PythonTest>python argparseTest.py --foo heiheihei
heiheihei

 2. action

在命令行中使用 "-f" 时,必须指定参数值,否则就会报错,有没有像 "-h" 那样,不需要指定参数值得呢,答案是有的,通过定义参数时指定action = "store_true" 即可,用法如下

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", "--foo", help = "这是一个f或foo命令的指令", action = "store_true")

args = parser.parse_args()

print(args.foo)

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py -f
True

  -f 没有指定任何参数,其实存的是True或False,如果出现,则其值为True,否则为False

 3. nargs : 指定参数的数量

 4. const : 保存一个常量

 5. default : 默认值

      1. 参数的值可以为整数N(N个),*(任意个,可以为0个),+(一个或多个)

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", help = "这是一个f命令的指令", nargs = "*")
parser.add_argument("-v", help = "这是一个v命令的指令", nargs = "*")

print(parser.parse_args("-f 1 2 -v 3 4 5".split()))

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f=['1', '2'], v=['3', '4', '5'])

      2. 值为?时,首先从命令行获取的参数,如果有 -v 而后面没加参数,则从const中取值,如果没有 -v ,则从default中取值

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", help = "这是一个f命令的指令", nargs = "?", default = "default")
parser.add_argument("-v", help = "这是一个v命令的指令", nargs = "?", const = "hahaha", default = "default")

print(parser.parse_args("-f 1 -v 2".split()))
print(parser.parse_args("-f 1 -v".split()))
print(parser.parse_args([]))

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f='1', v='2')
Namespace(f='1', v='hahaha')
Namespace(f='default', v='default')

6. type : 指定的参数类型,默认为str

7. choices : 设置参数值的范围,如果choices中的类型不是字符串,记得指定type

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", help = "这是一个f命令的指令", type = int, choices = range(1, 4))

print(parser.parse_args("-f 1".split()))
print(parser.parse_args("-f 4".split()))

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f=1)

usage: my_program [options] usage
my_program: error: argument -f: invalid choice: 4 (choose from 1, 2, 3)

8. required : 可选参数在命令行中是否可以省略(仅针对可选参数)

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", help = "这是一个f命令的指令", required=True)

print(parser.parse_args())

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
usage: my_program [options] usage
my_program: error: the following arguments are required: -f

(venv) E:\文档\Python\PythonTest>python argparseTest.py -f hahaha
Namespace(f='hahaha')

9.help : 设置这个选项的帮助信息

10.metavar : 该选项默认时会把参数的名字变为大写;更改时会在帮助信息中显示指定名称

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", "--foo", help = "这是一个f命令的指令", metavar="Function")

print(parser.print_help())

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
usage: my_program [options] usage

help信息前显示的信息———我的argparse命令行参数用法

optional arguments:
  -h, --help            show this help message and exit
  -f Function, --foo Function
                        这是一个f命令的指令

help信息之后显示的信息
None

11. dest : 这个参数相当于把位置参数或可选参数关联到一个特定的新变量中

import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", help = "这是一个f命令的指令")

print(parser.parse_args("-f haha".split()))

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(f='haha')

########################################################################################
import argparse

parser = argparse.ArgumentParser(prog = "my_program", usage = "%(prog)s [options] usage", description = "help信息前显示的信息———我的argparse命令行参数用法", epilog = "help信息之后显示的信息")

parser.add_argument("-f", help = "这是一个f命令的指令", dest = "foo")

print(parser.parse_args("-f haha".split()))

#运行结果------------------------------------------------------------
(venv) E:\文档\Python\PythonTest>python argparseTest.py
Namespace(foo='haha')

猜你喜欢

转载自blog.csdn.net/UserPython/article/details/80933613