Python

在Python中处理命令行参数详解(sys.argv 与 arg

2020-12-03  本文已影响0人  超级超级小天才

其他关于Python的总结文章请访问:https://www.jianshu.com/nb/47435944

在Python中处理命令行参数详解(sys.argv 与 argparse 详解)

在运行python程序的时候,往往需要传入一些参数,本节主要介绍两种设置传入命令行参数的方法。

sys.argv

使用sys.argv处理传入参数,需要引入sys模块:

import sys

sys.argv即是使用命令行运行 python 命令(或者 python3 命令)时获取到的命令行参数数组,它是一个list,包含了python(或者python3)命令后边传入的内容,包括紧跟在 python/python3 后边的第一个脚本的名称,后边其他的参数,如果有的话,则是按照空格来标识不同的参数,即使用空格隔开的元素(不论是整数、字符串、小数等)都视为一个独立的参数,比如如下的程序:

import sys

print(type(sys.argv))
print(len(sys.argv))
print(sys.argv)

我们在命令行中使用如下命令运行该脚本:

python main.py 123 1.5 hello world

就会得到如下的运行结果:

<class 'list'>
5
['main.py', '123', '1.5', 'hello', 'world']

从结果可以看到,这些参数在sys.argv中都以字符串的形式存储,所以如果想得到整数、小数等,需要使用 int、float 等进行显式转换:

import sys

a = int(sys.argv[1])
b = int(sys.argv[2])

print(a+b)

调用:

main.py 123 456

就会得到579的结果。

需要注意的是,脚本名称本身占据了sys.argv[0],所以其他传入的参数实际是从sys.argv[1]开始的。

这种方式虽然简单,但是可用性比较小,必须按照顺序传入参数,而且我们熟悉的 --- 形式的参数是不起作用的:

python main.py --a 123 --b 456
['main.py', '--a', '123', '--b', '456']

所以可以使用下边的功能更加强大、复杂的第二种方法

argparse

argparse的使用需要引入argparse包:

import argparse

我们将这种方法称为参数解析器方式,其使用可以分为三个基本步骤:

实例化参数解析器

使用ArgumentParser实例化一个参数解析器:

parser = argparse.ArgumentParser()

其完整的类的签名如下(可以参考https://docs.python.org/3/library/argparse.html#argumentparser-objects):

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)

这里列举几个比较重要、常用的参数:

添加参数设置

实例化好一个参数解析器后就开始为其添加参数设置,使用add_argument方法:正如下边的这行代码,添加了一个 -v 或者 --version 来传入的参数,它的默认值是 1.0,数据类型是字符串,并且有帮助信息,帮助信息可以在帮助文档中显示。

parser.add_argument('-v', '--version', default='1.0', type=str, help='print the version of the script')

完整的函数签名如下(可以参考https://docs.python.org/3/library/argparse.html#the-add-argument-method):

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

其中一些重要且常用的参数列在此处:

解析获取的参数

使用ArgumentParser.parse_args方法解析获取的参数,返回解析的结果:

args = parser.parse_args()

然后就可以使用设置中对每个参数指定的名字来获取它们的值,比如使用args.foo获取 --foo 参数获得的值

一个完整的简单的例子

这里有一个简单的例子,同时给出了不同的命令行参数对应的结果

import argparse

parser = argparse.ArgumentParser(description='An argparse example')

parser.add_argument("--method", '-m', choices=['add', 'multiple'], help='choose whether to add or to multiply')
parser.add_argument("--A", '-a', default=1, type=int, help="The first number")
parser.add_argument("--B", '-b', default=2, type=int, help="The second number")

args = parser.parse_args()

if args.method == 'add':
    print(args.A + args.B)
else:
    print(args.A * args.B)

如下是一些调用的例子:

>python main.py
2

>python main.py --help
usage: main.py [-h] [--method {add,multiple}] [--A A] [--B B]

An argparse example

optional arguments:
  -h, --help            show this help message and exit
  --method {add,multiple}, -m {add,multiple}
                        choose whether to add or to multiply
  --A A, -a A           The first number
  --B B, -b B           The second number

>python main.py --method multiple -a 10 -b 20
200

>python main.py --m add -a 10
12
上一篇下一篇

猜你喜欢

热点阅读